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

看板Python作者 (沙羅是轉換後的文字檔打m)時間6年前 (2019/03/17 10:23), 6年前編輯推噓6(607)
留言13則, 7人參與, 6年前最新討論串1/3 (看更多)
我知道set是無序的集合 我想問的是 若從同一個無重複行的文字檔一行行讀取並一個個丟進一個空set 最後觀察set中key的排列,發現每次的排列都不一樣 為什麼對同一個檔案進行同樣的操作卻會得到每次都不一樣的set? set中key的順序是如何決定的? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 209.107.210.176 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1552789435.A.281.html

03/17 14:01, 6年前 , 1F
我記得set裡面是隨便排欸
03/17 14:01, 1F
所以想知道是怎麼隨便排

03/17 14:03, 6年前 , 2F
https://reurl.cc/GjoxD 不知道有沒有用
03/17 14:03, 2F

03/17 14:05, 6年前 , 3F
你自己都說是無序了...又回來問順序...
03/17 14:05, 3F
所以想知道Python的底層是怎麼排列的。內建擲骰子決定如何插入key嗎? ※ 編輯: shala (205.185.214.165), 03/17/2019 14:12:55

03/17 14:09, 6年前 , 4F
無序應該是指iterate時的順序和丟進去的順序不一樣
03/17 14:09, 4F

03/17 14:11, 6年前 , 5F
內部的順序應該和hash function有關
03/17 14:11, 5F
謝謝給方向,我再了解看看 ※ 編輯: shala (205.185.214.165), 03/17/2019 14:20:11

03/17 14:27, 6年前 , 6F
python的set跟dict是用hash實作的 不像紅黑書 無序正常
03/17 14:27, 6F

03/17 18:19, 6年前 , 7F
CPython的id以及hash實作是跟記憶體位置有關
03/17 18:19, 7F

03/17 18:19, 6年前 , 8F
所以每次插進去set裡面的key都會不一樣
03/17 18:19, 8F

03/17 18:36, 6年前 , 9F
樓上大錯特錯。那只是 default 的 __hash__ 而已。
03/17 18:36, 9F

03/17 18:37, 6年前 , 10F
str 的__hash__ 是基於其內容的。
03/17 18:37, 10F

03/17 18:41, 6年前 , 11F
!!str的hash原來看內容,感謝糾正
03/17 18:41, 11F

03/17 18:41, 6年前 , 12F
不過object是看位址吧?
03/17 18:41, 12F

03/18 10:31, 6年前 , 13F
推!!!!
03/18 10:31, 13F
文章代碼(AID): #1SZQ-xA1 (Python)
文章代碼(AID): #1SZQ-xA1 (Python)