【发布时间】:2012-02-01 01:10:59
【问题描述】:
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
【问题讨论】:
-
集合可能在相等之前使用哈希码。尝试实现
__hash__。 -
您是否尝试在注释掉
__cmp__函数的情况下运行此代码? -
x.__contains__(y) <==> y in x -
只是为了确保您知道...该集合不是 in 运算符工作所必需的。如果你只需要一个简单的测试,[a1]中的a1就可以了。
-
有趣的是...如果您删除该集合,则只有第二个([a2] 中的 a1)调用 eq。我猜 in 运算符会在优化时首先检查身份?
标签: python set identity operator-keyword equality