作者adrianshum (Alien)
看板Python
标题Re: [问题] set中key的顺序是如何决定的?
时间Sun Mar 17 18:22:44 2019
连同推文有几点值得留意
没错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 的顺序一样。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 119.236.162.182
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1552818167.A.0BF.html
1F:推 shala: 谢谢。有看到3.4的使用者讨论randomise hash,所以至少从3. 03/17 22:49
2F:→ shala: 4开始 03/17 22:49
4F:→ LiloHuang: 文件也有提到为何需要做 hash randomization :) 03/17 22:59
5F:推 champion516: 学长好 03/18 16:42