Python:内置数值类型的`hash`值,字符串是否标准化?

jua*_*nza -8 python

我来到了这个问题,同时琢磨一下的顺序set,frozensetdict.Python不保证任何排序,任何排序都与hash某个级别的值相关联.但是数字或字符串内置类型的值的哈希值是标准化的吗?换句话说,会

hash((a,b,c,d,e,f,g))
Run Code Online (Sandbox Code Playgroud)

有一个确定的值,如果a,b,c,d,e,f,g是数字值或str

Ned*_*der 10

字符串和整数的哈希值绝对不是标准化的.它们可以随着Python的任何新实现而改变,包括在2.6.1和2.6.2之间,或者在Mac和相同版本的PC实现之间,等等.

但更重要的是,稳定的哈希值并不意味着可重复的迭代顺序.你可以不依赖于值的一组排序,永远.即使在一个过程中,两个集合也可以相等,并且不会以相同的顺序返回它们的值.如果一个集合有很多添加和删除,但另一个集合没有:

>>> a = set()
>>> for i in range(1000000): a.add(str(i))
...
>>> for i in range(6, 1000000): a.remove(str(i))
...
>>> b = set()
>>> for i in range(6): b.add(str(i))
...
>>> a == b
True
>>> list(a)
['1', '5', '2', '0', '3', '4']
>>> list(b)
['1', '0', '3', '2', '5', '4']
Run Code Online (Sandbox Code Playgroud)