具有相同值的不可变对象在Python中始终具有相同的哈希值.
>>> 5 == 5.0
True
>>> hash(5) == hash(5.0)
True
注意: 具有不同值的对象也可能具有相同的哈希值...当我们连续两次进行这个操作时, Python会将相同的内存地址分配给第二个对象. 因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的....综上, 对象的id值仅仅在对象的生命周期内唯一. 在对象被销毁之后, 或被创建之前, 其他对象可以具有相同的id值.
那为什么 is 操作的结果为 False 呢? 让我们看看这段代码....现在, 我们将通过将字典中键 5 的值设置为元组 ({}, 5) 来创建循环引用 (输出中的 {…} 指与 a 引用了相同的对象)....(a[b][0] 与 a 是相同的对象)
总结一下, 你也可以把例子拆成
a, b = {}, 5
a[b] = a, b
并且可以通过 a[b][0] 与 a 是相同的对象来证明是循环引用