python - hash() 函数的最小值?

标签 python c hash python-3.x 32bit-64bit

在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 ):如果 maxint 可用,则返回 hash( x ) - ( -maxint - 1 )。我知道由于整数和长整数的统一,这个值“失去了它的值(value)”,但这里可能是一个它仍然可以证明有用的领域。有人知道如何实现模拟吗?

最佳答案

hash() 可以返回任何整数,如您所见,整数的大小会因架构而异。这是字典排序随意的原因之一:在两个不同平台上的同一组操作可能会给出不同的结果,因为沿途使用的哈希值可能不同。

如果您所做的只是显示一个快速指纹的哈希值,那么只需保留这些位的一个子集。它作为哈希仍然有效。哈希函数的唯一要求是相等的值必须具有相等的哈希值。之后,哈希值之间的差异只会影响使用哈希值的算法的效率,因为冲突的可能性会上升或下降。

因此,例如,您可以决定需要一个 8 位哈希值,并使用以下方法获取它:

hash(x) % 100000000

或者您可以获得一个八字符的字母数字散列来显示:

md5(hash(x)).hexdigest()[:8]

关于python - hash() 函数的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010859/

相关文章:

javascript - 如何限制哈希长度

arrays - 迭代数据数组/哈希

python - 如何从外部进程获取实时日志Python 2

c - 从 stdin 获取输入时 %*c 会做什么?

c - 如何在不使用数组的情况下计算排序整数的模式

php - 比较目录状态或散列以获得乐趣和利润的最快方法

python - 为什么 Stripe-Signature header 永远不会匹配 request.body 的签名?

python - 整数除以负数

python - 需要一种方法来确定文件是否已写入

计算 Midi Sample Dump Standard 数据包的校验和