在Python3中破坏_eq___;和_hash___;之间关系的副作用

在Python3中破坏_eq___;和_hash___;之间关系的副作用,python,python-3.x,hash,equals-operator,Python,Python 3.x,Hash,Equals Operator,根据,比较相等的对象应该具有相同的哈希值。然而,在给定的时间,两个不同的可变对象可以进行相等的比较,这并不少见,例如,您可能仍然希望将它们用作字典中的不同键 在这种情况下,可以重新实现\uu eq\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo()和→ 散列(a)=散列(b)假设?或者最好用相同的语义定义一个新的“equals()”方法?打破这种关系

根据,比较相等的对象应该具有相同的哈希值。然而,在给定的时间,两个不同的可变对象可以进行相等的比较,这并不少见,例如,您可能仍然希望将它们用作字典中的不同键


在这种情况下,可以重新实现
\uu eq\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo()
→ 散列(a)=散列(b)
假设?或者最好用相同的语义定义一个新的
“equals()”
方法?打破这种关系可能会有什么副作用?

听起来,你希望你的对象被认为是等价的,而这(数学上)与相等是不同的。在不了解假定用例的更多细节的情况下,我会说创建一个新方法。如果您的对象是可变的,那么您根本不应该定义一个
\uuuuuuuuuuuuuuuuuuuuuuuuu
方法。一般来说,可变对象会因为这个确切的原因导致dict键变差。文档对可变性和散列有点模糊,但是我认为如果一个对象的可变部分不影响
\uuuueq\uuuu
\uuuuuhash\uuuuu
是可以的。