作者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://www.ptt.cc/bbs/Python/M.1552818167.A.0BF.html
推 shala: 謝謝。有看到3.4的使用者討論randomise hash,所以至少從3. 03/17 22:49
→ shala: 4開始 03/17 22:49
→ LiloHuang: 文件也有提到為何需要做 hash randomization :) 03/17 22:59
推 champion516: 學長好 03/18 16:42