我目前正在使用hash
在整数和字符串的元组(以及整数和字符串的嵌套元组等)上,以计算某些对象的唯一性。除非可能存在哈希冲突,我想知道 - 是hash
那些数据类型上的函数保证为不同版本的 Python 返回相同的结果?
不会。除了 32 位和 64 位版本的 Python 之间长期存在的差异之外,哈希算法在 Python 3.3 中进行了更改 http://docs.python.org/3/reference/datamodel.html#object.__hash__解决安全问题:
默认情况下,hashstr、bytes 和 datetime 对象的 () 值使用不可预测的随机值“加盐”。尽管它们在单个 Python 进程中保持不变,但在 Python 的重复调用之间它们是不可预测的。
这样做的目的是为了防止由于精心选择的输入而导致拒绝服务,这些输入利用了字典插入的最坏情况性能,复杂度为 O(n^2)。看http://www.ocert.org/advisories/ocert-2011-003.html http://www.ocert.org/advisories/ocert-2011-003.html了解详情。
更改哈希值会影响字典、集合和其他映射的迭代顺序。 Python 从未对这种顺序做出保证(并且它通常在 32 位和 64 位版本之间变化)。
结果,从3.3开始hash()
甚至不能保证在同一 Python 版本的不同调用之间返回相同的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)