은 내가 hash(a)
과 hash(b)
가 같은 값을 반환하기 때문에 d
는 하나의 쌍을 유지하는 이유라고 처음에는 생각 파이썬 사전 수수께끼
>>> class S(str): pass
...
>>> a = 'hello'
>>> b = S('hello')
>>> d = {a:a, b:b}
>>> d
{'hello': 'hello'}
>>> type(d[a])
<class '__main__.S'>
>>> type(d[b])
<class '__main__.S'>
에 입력, 그래서 시도 :
>>> class A(object):
... def __hash__(self):
... return 0
...
>>> class B(object):
... def __hash__(self):
... return 0
...
>>> d = {A():A(),B():B()}
>>> d
{<__main__.A object at 0x101808b90>: <__main__.A object at 0x101808b10>, <__main__.B object at 0x101808d10>: <__main__.B object at 0x101808cd0>}
이제 혼란스러워합니다. 첫 번째 코드 목록을 보면 d
은 한 쌍만 유지되었지만 두 번째 목록에서는 동일한 해시를 가지고 있더라도 d
두 키가 모두 유지 되었습니까?