我了解到不可变对象的哈希值是该对象的整数表示形式,在进程生命周期内是唯一的。
整数对象的哈希值与该整数所包含的值相同。例如,
>>> int(1000).__hash__()
1000
但是,当整数变得足够大时,在某个阈值之后上述原则就会被打破。它的值似乎在某个限制范围内滚动。
>>> int(10000000000000000).__hash__()
10000000000000000
>>> int(100000000000000000).__hash__()
100000000000000000
>>> int(1000000000000000000).__hash__()
1000000000000000000
>>> int(10000000000000000000).__hash__()
776627963145224196
两个问题:
- 什么是限制?哈希表覆盖的整数空间是什么?
- 如何为超过上述限制的整数计算哈希值?
系统信息:
Linux lap-0179 5.13.0-44-generic #49~20.04.1-Ubuntu SMP Wed May 18 18:44:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Python解释器:
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
int
对象具有相同的哈希值? - sahasrara62__hash __()
方法应返回一个整数。唯一必需的属性是比较相等的对象具有相同的哈希值。 - burandict
实现,Hilbert的解决方案将会很有用。 - chepner