相关疑难解决方法(0)

python中的默认__hash__是什么?

我经常使用时髦的东西作为字典的键,因此,我想知道什么是正确的方法 - 这通过为我的对象实现良好的哈希方法.我知道这里提出的其他问题是实现哈希的好方法,但我想了解默认如何__hash__适用于自定义对象,以及是否可以依赖它.

我注意到mutables显然是不可删除的,因为hash({})引发了一个错误...但奇怪的是,自定义类是可以清除的:

>>> class Object(object): pass
>>> o = Object()
>>> hash(o)
Run Code Online (Sandbox Code Playgroud)

那么,有人知道这个默认哈希函数是如何工作的吗?通过理解这一点,我想知道:

如果我将相同类型的对象放入字典的键中,我可以依赖此默认哈希吗?例如:

key1 = MyObject()
key2 = MyObject()
key3 = MyObject()
{key1: 1, key2: 'blabla', key3: 456}
Run Code Online (Sandbox Code Playgroud)

如果我使用不同类型的对象作为字典中的键,我可以依赖它吗?例如

{int: 123, MyObject(10): 'bla', 'plo': 890}
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,如何确保我的自定义哈希值不会与内置哈希冲突?例如:

{int: 123, MyObject(10): 'bla', MyObjectWithCustomHash(123): 890}
Run Code Online (Sandbox Code Playgroud)

python

44
推荐指数
5
解决办法
2万
查看次数

标签 统计

python ×1