首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >内置Python hash()函数

内置Python hash()函数
EN

Stack Overflow用户
提问于 2009-04-27 14:31:01
回答 7查看 106.4K关注 0票数 84

Windows XP、Python 2.5:

代码语言:javascript
复制
hash('http://stackoverflow.com') Result: 1934711907

谷歌应用引擎(http://shell.appspot.com/):

代码语言:javascript
复制
hash('http://stackoverflow.com') Result: -5768830964305142685

为什么会这样呢?如何使用散列函数在不同的平台(Windows、Linux、Mac)上获得相同的结果?

EN

回答 7

Stack Overflow用户

发布于 2011-03-29 12:36:02

散列结果在32位和64位平台之间有所不同

如果计算出的哈希在两个平台上都相同,请考虑使用

代码语言:javascript
复制
def hash32(value):
    return hash(value) & 0xffffffff
票数 7
EN

Stack Overflow用户

发布于 2010-05-26 08:58:07

据猜测,AppEngine使用的是Python64位实现(-5768830964305142685不适合32位),而您的Python实现是32位。你不能指望对象散列在不同的实现之间是有意义的比较。

票数 6
EN

Stack Overflow用户

发布于 2012-02-20 17:46:15

这是Google在python 2.5的生产中使用的散列函数:

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/793761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档