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