Python返回的最大/最小值';s hash()函数

Python返回的最大/最小值';s hash()函数,python,hash,hashtable,Python,Hash,Hashtable,上下文:构建一致的哈希算法 Python的hash()函数的状态为: 返回对象的哈希值(如果有)。散列值是整数 但是,它没有明确说明函数是否映射到整数范围(具有最小值和最大值) 来自其他语言,其中基本类型的值是有界的(例如C#s/Java的Int.MaxValue),我知道这一点——即在后台从Int切换到long 我是否要假设hash()函数也是无界的?或者它是有界的,例如映射到Python分配给的-即从文档中的-2147483648到2147483647? hash()截断从对象的自定义返回的

上下文:构建一致的哈希算法

Python的
hash()
函数的状态为:

返回对象的哈希值(如果有)。散列值是整数

但是,它没有明确说明函数是否映射到整数范围(具有最小值和最大值)

来自其他语言,其中基本类型的值是有界的(例如C#s/Java的
Int.MaxValue
),我知道这一点——即在后台从
Int
切换到
long

我是否要假设
hash()
函数也是无界的?或者它是有界的,例如映射到Python分配给的-即从文档中的
-2147483648
2147483647

hash()
截断从对象的自定义
返回的值\uuuuuuuuuuuuuuuuuuu()
方法设置为Py\u ssize\t的大小。这通常是8个字节 64位版本和32位版本上的4字节。如果一个对象的
\uuuuuuuuuuuuuu散列()
必须在不同位大小的构建上进行互操作,请确保检查 所有受支持的生成上的宽度。一个简单的方法是使用
python-c“导入系统;打印(sys.hash\u info.width)


更多细节可在此处找到

正如其他人指出的,文档中有一个放错地方的[1]注释,内容如下:

hash()将从对象的自定义hash()方法返回的值截断为Py\u ssize\t的大小

要回答这个问题,我们需要得到这个
Py\u ssize\u t
。经过一些研究,它似乎存储在
sys.maxsize
中,尽管我希望这里有一些反馈

我最终采用的解决方案是:

导入系统 bits=sys.hash_info.width#在我的例子中是64 打印(sys.maxsize)#在我的例子中,是9223372036854775807 #因此: hash_maxValue=int((2**bit)/2)-19223372036854775807或+sys.maxsize hash_minValue=-hash_maxValue#-9223372036854775807或-sys.maxsize 很高兴收到关于这方面的评论/反馈–在证明错误之前,这是公认的答案



[1] 包含的注释不是专门用于
hash()

的注释,而是“在后台从int切换到long”。这种区别在Python3中不再存在,它是跨整个范围的
int
,并且从“short int int”到“long int”到“infinite”的切换没有公开。