gpt4 book ai didi

python - python 的 hash() 是可移植的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:25 24 4
gpt4 key购买 nike

python的hash函数是可移植的吗?

我的意思是“可移植”,它会在 python 版本、平台和实现中返回相同的结果(对于相同的数据)吗?

如果没有,是否有任何替代方案可以提供此类功能(同时仍然能够散列通用数据结构)?


The documentation不是特别有帮助。 This question指的是一个似乎推出自己版本的库,但我不确定不可移植性是否是它的原因。

最佳答案

不,hash() 不保证可移植。

Python 3.3 还默认使用哈希随机化,其中某些类型使用启动时选择的哈希种子进行哈希处理。哈希值在 Python 解释器调用之间会有所不同。

来自object.__hash__() documenation :

By default, the __hash__() values of str, bytes and datetime objects are “salted” with an unpredictable random value. Although they remain constant within an individual Python process, they are not predictable between repeated invocations of Python.

This is intended to provide protection against a denial-of-service caused by carefully-chosen inputs that exploit the worst case performance of a dict insertion, O(n^2) complexity. See http://www.ocert.org/advisories/ocert-2011-003.html for details.

Changing hash values affects the iteration order of dicts, sets and other mappings. Python has never made guarantees about this ordering (and it typically varies between 32-bit and 64-bit builds).

See also PYTHONHASHSEED.

Python 2.6.8 和 3.2.3 及更新版本支持相同的功能,但通常将其禁用。

Python 3.2 引入了一个 sys.hash_info named tuple为您提供有关当前解释器的哈希实现的详细信息。

如果您需要一个可移植的散列,有很多实现。标准库包括一个名为 hashlib 的加密哈希库。 ;这些实现绝对是可移植的。另一种选择是 mm3 package它提供了Murmur3 non-cryptographic hash function implementations .

常见的数据结构需要先转换为字节;你可以为此使用序列化,比如 jsonpickle模块。

关于python - python 的 hash() 是可移植的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com