使用对象id作为Python中对象的哈希

时间:2010-01-11 05:36:31

标签: python hash

使用对象id作为哈希键(通过。__hash__)能够为一个程序的单个实例散列其他可变对象是明智的吗?使用对象属性会更好,但它们都是可变的并且可以改变。

我在看Sets of instances时遇到了这种情况,我想知道这是否明智。

2 个答案:

答案 0 :(得分:14)

是的,只要您同样定义__eq__(并且可能是__ne__! - )。 IOW,没关系,只要你a==b的意思与a is b完全相同就好了! - )

答案 1 :(得分:6)

对于大多数Python类,这是默认行为。不可动摇的是不可取的,原因很简单:它们是可变的集合。

对于集合,基于其内容的相等性,具有相等关系(由__eq__()定义)是切实可行的。这个以及__hash__()要求平等的要求,当然会使__hash__()变为可变,这对包含这些对象的集合来说是可怕的。

所以你可以这样做,但它会花费你基于内容的平等关系。