如何将2个对象视为不相等而不是Python的识别,但具有相同的ID?

Luc*_*mon 3 python hash equality object

这段代码片段让我很困惑:

class O(object):
    pass
O() == O()             # False
O() is O()             # False
hash(O()) == hash(O()) # True !
id(O()) == id(O())     # True !!!
Run Code Online (Sandbox Code Playgroud)

我一直认为is运算符正在比较ids,并且默认实例相等check(==)也比较了ids,或者至少是hashes:

2类实例如何共享相同id但不以任何方式相同?

我正在使用CPython 2.7.6.

nox*_*fox 5

答案就是这个问题.

在CPython中,id返回存储数据的指针.

在您的示例中,GC正在比较comparinson之前删除旧对象.第二个对象放在第一个对象的位置,因此返回相同的值id.