2
衝突があった場合、Pythonはハッシュ衝突を解決します。 'a in s'は平等をチェックしないが、 'b in s'はどうしてですか? ハッシュ()とeq()の間のid()の呼び出しはありますか?なぜ、ハッシュは同じハッシュとアイデンティティを持つオブジェクトの等価性をチェックしませんか?
In [107]: class Foo(object):
...: def __eq__(self, other):
...: print "equality"
...: return False
...: def __ne__(self, other):
...: print "not equality"
...: return not self == other
...: def __hash__(self):
...: print "hash"
...: return 7
...: a = Foo()
...: b = Foo()
...: s = set()
...:
In [108]: s.add(a)
hash
In [109]: a in s
hash
Out[109]: True
In [110]: b in s
hash
equality
Out[110]: False
cpythonでは、 'if(startkey == key)return entry;'というCの文で 'is/checkobject.c :: set_lookkey'で" is "チェックが行われます。 – tdelaney
Pythonリファレンスをありがとう!その実装は私が探していたものでした。 –