使用对象id
作为哈希键(通过。__hash__
)能够为一个程序的单个实例散列其他可变对象是明智的吗?使用对象属性会更好,但它们都是可变的并且可以改变。
我在看Sets of instances时遇到了这种情况,我想知道这是否明智。
答案 0 :(得分:14)
是的,只要您同样定义__eq__
(并且可能是__ne__
! - )。 IOW,没关系,只要你a==b
的意思与a is b
完全相同就好了! - )
答案 1 :(得分:6)
对于大多数Python类,这是默认行为。不可动摇的是不可取的,原因很简单:它们是可变的集合。
对于集合,基于其内容的相等性,具有相等关系(由__eq__()
定义)是切实可行的。这个以及__hash__()
要求平等的要求,当然会使__hash__()
变为可变,这对包含这些对象的集合来说是可怕的。
所以你可以这样做,但它会花费你基于内容的平等关系。