class A(object):
def __cmp__(self):
print '__cmp__'
return object.__cmp__(self)
def __eq__(self, rhs):
print '__eq__'
return True
a1 = A()
a2 = A()
print a1 in set([a1])
print a1 in set([a2])
为什么第一行打印 True,而第二行打印 False?并且两者都没有进入运算符 eq?
我正在使用 Python 2.6
最佳答案
Set __contains__ 按以下顺序进行检查:
'Match' if hash(a) == hash(b) and (a is b or a==b) else 'No Match'
相关的 C 源代码在 Objects/setobject.c::set_lookkey() 和 Objects/object.c::PyObject_RichCompareBool() 中。
关于python - 设置 "in"运算符 : uses equality or identity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9089400/