我经常使用时髦的东西作为字典的键,因此,我想知道什么是正确的方法来做到这一点-这通过实现良好的散列方法为我的对象。我知道这里提出的其他问题,比如 实现 < strong > hash 的好方法,但是我想了解默认的 __hash__如何用于自定义对象,以及是否可以依赖它。
我已经注意到,由于 hash({})提出了一个错误,所以可变类是显然不可散列的... ... 但奇怪的是,自定义类是可散列的:
>>> class Object(object): pass
>>> o = Object()
>>> hash(o)
那么,有人知道这个默认哈希函数是如何工作的吗:
如果我将相同类型的对象作为字典的键,我是否可以依赖这个默认哈希?例如:
key1 = MyObject()
key2 = MyObject()
key3 = MyObject()
{key1: 1, key2: 'blabla', key3: 456}
如果我在字典中使用不同类型的对象作为键,我可以依赖它吗。
{int: 123, MyObject(10): 'bla', 'plo': 890}
在最后一种情况下,如何确保我的自定义散列不会与内置散列冲突?例如:
{int: 123, MyObject(10): 'bla', MyObjectWithCustomHash(123): 890}