Python 3 的默认散列函数不是确定性的(hash(None) 因运行而异),甚至没有尽最大努力以高概率生成唯一 id(hash(-1)==hash( -2) 是真的)。
是否有其他一些散列函数可以很好地作为校验和(即两个数据结构散列到相同值的概率可以忽略不计,并且每次运行 python 都返回相同的结果),并且支持所有 python 的内置数据类型,包括无?
理想情况下,它将在标准库中。我可以腌制对象或获取字符串表示,但这似乎不必要,并且浮点数的字符串表示可能是非常糟糕的校验和。
我在标准库中找到了加密哈希 (md5,sha256),但它们只对字节串进行操作。
Haskell 似乎在他们的标准库中得到了这个 ~ 几乎是正确的......但是“Nothing::Maybe Int”和 0 都散列到 0,所以它也不完美。
您可以在腌制对象上使用hashlib 中的任何哈希。
pickle.dumps 不适合散列。
您可以将排序键json与hashlib.
hashlib.md5(json.dumps(data, sort_keys=True)).hexdigest()
Run Code Online (Sandbox Code Playgroud)
根据 AndrewWagner 的评论,摘自:https : //stackoverflow.com/a/10288255/3858507。
顺便说一下,仅供参考,因为这会导致安全漏洞,PYTHONHASHSEED环境变量可用于在整个应用程序中禁用散列随机化。