为什么Python的hash()值的长度不同?

时间:2015-01-18 11:35:44

标签: python python-3.x hash

我想掩盖一些Python哈希值,当我检查不同哈希值的长度时,我感到很惊讶。

>>> import sys
>>> sys.getsizeof(hash(42))
14
>>> sys.getsizeof(hash("Hello World"))
16
>>> sys.getsizeof(hash("Lorem ipsum dolor sit amet, consectetur adipisicing elit"))
18

使用哈希函数返回固定大小的哈希值会更容易在位级别上使用它们。有可变长度的原因吗?是否有保证的最小长度?

1 个答案:

答案 0 :(得分:3)

>>> sys.getsizeof(2**10)
14
>>> sys.getsizeof(2**20)
16
>>> sys.getsizeof(2**30)
18

hash的返回值仅限于少量位(可能为64位),但int大小的粒度小于此值,因此取决于确切的哈希值,sizeof可能会有所不同。

正如评论已经指出的那样,这对于小提琴来说没有意义。对于按位运算符,(非负)数字用无限数量的零填充。