コンソールで入力しました
>>> 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'>
最初は、d
ペアを1つだけ保持した理由は、同じ値hash(a)
をhash(b)
返したためだと思ったので、次のことを試しました。
>>> 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
1つのペアしか保持されていませんが、2番目のリストでは、d
同じハッシュを使用しているにもかかわらず、両方のキーが保持されているのはなぜですか?