python - 设置 "in"运算符 : uses equality or identity?

标签 python set identity operator-keyword equality

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/

相关文章:

python - Sqlalchemy 加载实例事件未触发

Python从文本文件中删除标点符号

batch-file - 设置语法批处理脚本错误

java - 将一组 Java 对象转换为另一组对象的最佳方式是什么?

sql-server - SQL Server 2005 :is it safe to use @@identity?

keycloak - 添加具有凭据的新用户临时属性不起作用

python - Pyqt:QTextCursor.WordUnderCursor 未按预期工作

python - 使用Numpy和OpenCV进行图像标准化和归一化

algorithm - 如何在 Clojure 中区分/减去两个列表

arrays - 是否有与 matlab ismember 函数等效的 fortran 函数?