python中的散列函数遇到了问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我相信hash()函数在所有python解释器中的工作方式相同。但是当我在手机上运行它时,对于散列字符串和数字,我得到相同的散列值,但是当我的散列内置数据类型时,哈希值就不同了。

PC Python解释器(Python2.7.3)

>>> hash(int)
31585118
>>> hash("hello sl4a")
1532079858
>>> hash(101)
101

移动Python解释器(Python2.6.2)

>>> hash(int)
-2146549248
>>> hash("hello sl4a")
1532079858
>>> hash(101)
101

这是个bug吗?

提问于
用户回答回答于

对于旧python(至少,我的Python 2.7)来说,似乎

hash(<some type>) = id(<type>) / 16

还有CPythonid()是内存中的地址-...

>>> id(int) / hash(int)                                                     
16                                                                              
>>> id(int) % hash(int)                                                 
0                                                                               

鉴于以上所述,类型的散列(以及其他内置的)将因安装不同而有所不同,因为函数位于不同的地址。

相反,值的散列(我认为您指的是“非内部对象”)(在添加随机内容之前)是根据它们的值计算的,因此很可能是可重复的。

>>> for i in range(-1000,1000):
...     if hash(i) != i: print(i)
...
-1
用户回答回答于
>>> import hashlib
>>> hashlib.algorithms
('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')

扫码关注云+社区

领取腾讯云代金券