Windows XP、Python 2.5:
hash('http://stackoverflow.com') Result: 1934711907
谷歌应用引擎(http://shell.appspot.com/):
hash('http://stackoverflow.com') Result: -5768830964305142685
为什么会这样呢?如何使用散列函数在不同的平台(Windows、Linux、Mac)上获得相同的结果?
发布于 2011-03-29 12:36:02
散列结果在32位和64位平台之间有所不同
如果计算出的哈希在两个平台上都相同,请考虑使用
def hash32(value):
return hash(value) & 0xffffffff
发布于 2010-05-26 08:58:07
据猜测,AppEngine使用的是Python64位实现(-5768830964305142685不适合32位),而您的Python实现是32位。你不能指望对象散列在不同的实现之间是有意义的比较。
发布于 2012-02-20 17:46:15
这是Google在python 2.5的生产中使用的散列函数:
def c_mul(a, b):
return eval(hex((long(a) * b) & (2**64 - 1))[:-1])
def py25hash(self):
if not self:
return 0 # empty
value = ord(self[0]) << 7
for char in self:
value = c_mul(1000003, value) ^ ord(char)
value = value ^ len(self)
if value == -1:
value = -2
if value >= 2**63:
value -= 2**64
return value
https://stackoverflow.com/questions/793761
复制相似问题