Re: [問題] set中key的順序是如何決定的?

看板Python作者 (Alien)時間5年前 (2019/03/17 18:22), 編輯推噓2(203)
留言5則, 3人參與, 5年前最新討論串3/3 (看更多)
連同推文有幾點值得留意 沒錯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

03/17 22:49, 5年前 , 1F
謝謝。有看到3.4的使用者討論randomise hash,所以至少從3.
03/17 22:49, 1F

03/17 22:49, 5年前 , 2F
4開始
03/17 22:49, 2F

03/17 22:55, 5年前 , 3F
精確來說從 Python 3.3 預設啟用 http://goo.gl/Znb7Hu
03/17 22:55, 3F

03/17 22:59, 5年前 , 4F
文件也有提到為何需要做 hash randomization :)
03/17 22:59, 4F

03/18 16:42, 5年前 , 5F
學長好
03/18 16:42, 5F
文章代碼(AID): #1SZX_t2_ (Python)
文章代碼(AID): #1SZX_t2_ (Python)