在Python中使用Hashing元组会在不同的系统中导致不同的结果

Sol*_*aji 5 python hash

我正在练习元组哈希.在那里,我正在研究Python 2.7.以下是代码:

num = int(raw_input())
num_list = [int(x) for x in raw_input().split()]
print(hash(tuple(num_list)))
Run Code Online (Sandbox Code Playgroud)

上面的代码导致了

>>> 2
>>> 1 2
>>> 3713081631934410656
Run Code Online (Sandbox Code Playgroud)

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

>>> 1299869600
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*nne 1

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

它被设计为仅在单个 Python 会话中使用,而不是跨会话或机器。因此,您永远不应该依赖hash()超出此范围的值。

如果您需要散列在各处产生相同的结果,请考虑校验和,例如:

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