인사이트 이벤트 참여
2월 11일 인사이트에서 아래의 두 코드의 결과가 왜 저렇게 되는 설명하는 이벤트가 있었습니다.
참고 링크 : “깐깐하게 × 슬기로운” 크로스 이벤트
>>> {True: 'yes', 1: 'no', 1.0: 'maybe'}
{True: 'maybe'}
>>> False and 1
False
>>> True and 'why?'
'why?'
그 이벤트에 참여한 설명을 공개해 봅니다.
파이썬에서는 {키:값, 키:값, 키:값....} 형태로 사전 자료형을 표현하며, 사전 자료형이란 중복되지 않은 키와 그 키에 대응되는 값을 저장하는 자료형입니다.
{True: 'yes', 1: 'no', 1.0: 'maybe'}
위 코드는 True, 1, 1.0 이란 3개의 키에 'yes', 'no', 'maybe'라는 값을 저장하는 내용입니다.
그런데 여기서 사전 자료형은 중복되지 않는 키로 저장한다고 했습니다. 파이썬에서는 해쉬(hash) 함수를 사용해서 키가 중복되지 않도록 합니다.
True, 1, 1.0 각각에 해쉬함수를 적용해 보면 아래와 같습니다.
>>> hash(True)
1
>>> hash(1)
1
>>> hash(1.0)
1
즉 True, 1, 1.0은 각각 다른 값이지만 해쉬함수에서는 동일한 값 1로 판단되며, 결국 모두 같은 키에 'yes', 'no', 'maybe'로 값을 순차적으로 덮어쓰게 되어 마지막 'maybe'만 남게 됩니다.
그리고 키는 마지막 키인 1.0이 아니라 최초 키인 True로 나타나는데 이는 사전 자료형에서 키를 저장 시 해쉬함수로 중복되지 않은 최초의 키만 저장하기 때문입니다.
불린 조합 표현식은 연산을 한 후에 결과를 반환합니다.
그중 and 표현식은 첫 번째 값을 불린으로 평가하여 거짓(False)이면 첫 번째 값을 참(True)이면 두 번째 값을 반환합니다.
>>> False and 1
False
위 코드에서는 첫 번째 값이 거짓이므로 첫 번째 값인 False를 반환합니다.
>>> True and 'why?'
'why?'
마찬가지로 첫 번째 값이 참이므로 두 번째 값인 'why?'를 반환하고 있습니다.
이는 많은 컴퓨터 언어에서 공통되는 사항으로 and 표현식 처리 시 첫 번째 값이 거짓인 경우 두 번째 값은 전혀 처리할 필요가 없기 때문입니다.
그리고 당첨!!!, 하지만 제가 PyCharm은 안 쓰는 관계로 아는 지인에게 전달~
즐거운 주말 보내세요. ^^/