程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了python中默认的__hash__是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决python中默认的__hash__是什么??

开发过程中遇到python中默认的__hash__是什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于python中默认的__hash__是什么?的解决方法建议,希望对你解决python中默认的__hash__是什么?有所启发或帮助;

您可以依靠的是:自定义对象具有默认值hash(),该默认值在某种程度上基于对象的身份。也就是说,使用默认哈希的任何对象在其生命周期内将具有该哈希的恒定值,并且不同的对象可能具有也可能没有不同的哈希值。

您不能依赖所返回ID()的值和所返回的值之间的任何特定关系hash()。在Python 2.6和更低版本的标准C实现中,它们在Python 2.7-3.2中是相同的hash(x)==ID(x)/16

最初我写道,在3.2.3和更高版本或2.7.3或更高版本中,哈希值可能是随机的,而在Python 3.3中,关系始终是随机的。实际上,目前随机化仅适用于散列字符串,因此,事实上16分频的关系可能会暂时保持下去,但不要依靠它。

哈希冲突通常并不重要:在字典查找中查找对象时,哈希必须具有相同的哈希,并且必须比较相等。只有当您遇到很大比例的冲突(例如,由于拒绝服务攻击而导致最近版本的Python能够随机化哈希计算)时,冲突才有意义。

解决方法

我经常使用时髦的东西作为字典的键,因此,我想知道什么是正确的方法-这是通过为对象实现良好的哈希方法实现的。我知道这里提出的其他问题[是实现
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,MyObjectWithCustomHash(123): 890}

大佬总结

以上是大佬教程为你收集整理的python中默认的__hash__是什么?全部内容,希望文章能够帮你解决python中默认的__hash__是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: