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

时间:2015-12-03 06:03:49

标签: python hash

我正在练习元组哈希。在那里,我正在研究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吗?

1 个答案:

答案 0 :(得分:1)

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

它被设计为仅在单个Python会话中使用,而不是在会话或计算机之间使用。因此,除此之外,您永远不应该依赖hash()的价值。

如果您需要哈希在任何地方产生相同的结果,请考虑校验和,例如:

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