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

Why do Python's hash() values differ in length?

我想屏蔽掉 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

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

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

hash的return值被限制在一些小的位数(大概64位),但是int的大小粒度比那个小,所以根据确切的哈希值,sizeof 可能会有所不同。

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