Re: [问题] set中key的顺序是如何决定的?

楼主: adrianshum (Alien)   2019-03-17 18:22:44
连同推文有几点值得留意
没错dict和set 内部都是hash table, 所以内部
的储存次序和hash 有关,也即是没特别的顺
序。
但在 python 3.6 开始(在3.7 成为标准),
Dict 的iterate 顺序则和插入顺序一样。
可是set 并没这改动。如果明白hash table
的运作,会明白正常来说,同样的输入会
形成一样的储存顺序(同样的内容会算出同样
的 hash) 。那为什么会形成原问者提到:同样
的档案,出来的 set 的顺序会不一样,那是
由于在某版本开始的 python(3.4 3.5 左右吧?
忘了)会 randomise hash 的计算,让每个
Process 算出来的hash 不一样。
我猜大概原问者是读进文字档再印出set, 然
后同样的程式跑两次,看到不一样的顺序。
假如改一下,同一个程序,把“读同一档、
放进set 、印出set”连跑两次,应该会发
现两次的set 的顺序一样。
作者: shala (沙罗)   2019-03-17 22:49:00
谢谢。有看到3.4的使用者讨论randomise hash,所以至少从3.4开始
作者: LiloHuang (十年一刻)   2019-03-17 22:55:00
精确来说从 Python 3.3 默认启用 http://goo.gl/Znb7Hu文件也有提到为何需要做 hash randomization :)
作者: champion516   2019-03-18 16:42:00
学长好

Links booklink

Contact Us: admin [ a t ] ucptt.com