gpt4 book ai didi

python - Python 中的散列元组在不同系统中导致不同的结果

转载 作者:太空狗 更新时间:2023-10-30 01:33:19 25 4
gpt4 key购买 nike

我在练习元组散列。在那里我正在研究 Python 2.7。下面是代码:

num = int(raw_input())
num_list = [int(x) for x in raw_input().split()]
print(hash(tuple(num_list)))

以上代码结果

>>> 2
>>> 1 2
>>> 3713081631934410656

但是在我使用 Python 3.4 的本地 PC 上,答案是

>>> 1299869600

代码已被接受,但我无法找出导致不同结果的原因。这是针对不同版本的 Python 吗?

最佳答案

hash() 可能会在不同的操作系统、架构、Python 实现和 Python 版本上为同一对象返回不同的值。

它被设计为仅在单个 Python session 中使用,不能跨 session 或跨机器使用。因此,您永远不应依赖 hash() 的值。

如果您需要在所有地方产生相同结果的散列,请考虑校验和,例如:

  • MD5 或 SHA1,
  • xxHash 根据其作者提供跨多个操作系统和体系结构的稳定结果,无论是小端还是大端、32/64 位、posix 与否等)
  • 或谨慎使用 Murmur,因为某些版本可能会在不同的体系结构上产生不同的结果。例如,在将 C Murmur2 移植到 IBM S390 Linux 安装(所有奇怪的地方!)时,我体验到了这只手。为了避免出现问题,我结束了在该操作系统上编写一个缓慢但独立于架构的纯 Python 实现而不是 C 实现。

关于python - Python 中的散列元组在不同系统中导致不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34058947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com