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