元组上哈希输出不一致

问题描述 投票:2回答:2

比较某些两个元素元组的hash es >>

for i in range(11):
    print(i, hash((i,i)) == hash((-i,-i)))

我希望在True时获得i==0,在其余时间获得False。我很惊讶地看到这个:

0 True
1 False
2 True
3 True
4 True
5 True
6 True
7 True
8 False
9 True
10 True

为什么会这样?

AFAIK与this问题不同,因为它与顺序无关,而与值本身有关。

比较范围(11)中i的一些两个元素元组的哈希:print(i,hash((i,i))== hash((-i,-i)))我希望在以下情况下获得True i == 0,其余为False。令我惊讶的是:...

python hash tuples python-3.7
2个回答
3
投票

即使良好的哈希算法努力使哈希值保持一致,也永远不能保证它们没有冲突。 Python 3.8对哈希算法进行了改进,尤其是对于元组,因此与Python 3.7相比,该问题现在在Python 3.8中更难以重现。


0
投票

供以后参考,我最终使用此代码进行一致的元组哈希:

© www.soinside.com 2019 - 2024. All rights reserved.