在python(3)中,hash(x)
可以返回的最小值是多少?
我想使用散列为数据库值提供快速“指纹”(基本上可以很容易地看出两个较长的相似文本是否实际上相等),并希望摆脱负数(为简单起见) ,所以我想我只是添加尽可能小的值以获得零值及以上值。 the manual非常有帮助地说明“哈希值是整数”。这和我以前知道的差不多。
今天我有点惊讶,因为我发现我在 64 位 ubuntu 上手动编译的 python 显然使用 64 位左右的哈希函数;我一直认为应该是32位的。机器架构对 hash()
函数有影响吗?
另外,当我编译 python 时,我没有设置任何选项来编译 64 位架构(希望它“能正常工作”)。 python 是自行调整还是我现在在 64 位机器上有 32 位 python?这不是一个愚蠢的问题,我相信很多时候你会根据处理器提供单独的包。
编辑:我强烈怀疑答案将与 sys.maxint
密切相关,后者已不幸从 python 3 中删除。我怀疑我应该 def xhash( x ):如果
。我知道由于整数和长整数的统一,这个值“失去了它的值(value)”,但这里可能是一个它仍然可以证明有用的领域。有人知道如何实现模拟吗?maxint
可用,则返回 hash( x ) - ( -maxint - 1 )
最佳答案
hash()
可以返回任何整数,如您所见,整数的大小会因架构而异。这是字典排序随意的原因之一:在两个不同平台上的同一组操作可能会给出不同的结果,因为沿途使用的哈希值可能不同。
如果您所做的只是显示一个快速指纹的哈希值,那么只需保留这些位的一个子集。它作为哈希仍然有效。哈希函数的唯一要求是相等的值必须具有相等的哈希值。之后,哈希值之间的差异只会影响使用哈希值的算法的效率,因为冲突的可能性会上升或下降。
因此,例如,您可以决定需要一个 8 位哈希值,并使用以下方法获取它:
hash(x) % 100000000
或者您可以获得一个八字符的字母数字散列来显示:
md5(hash(x)).hexdigest()[:8]
关于python - hash() 函数的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010859/