作者shala (沙羅是轉換後的文字檔打m)
看板Python
標題[問題] set中key的順序是如何決定的?
時間Sun Mar 17 10:23:53 2019
我知道set是無序的集合
我想問的是
若從同一個無重複行的文字檔一行行讀取並一個個丟進一個空set
最後觀察set中key的排列,發現每次的排列都不一樣
為什麼對同一個檔案進行同樣的操作卻會得到每次都不一樣的set?
set中key的順序是如何決定的?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 209.107.210.176
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1552789435.A.281.html
1F:推 Akkusaii3741: 我記得set裡面是隨便排欸03/17 14:01
所以想知道是怎麼隨便排
3F:推 lemon651: 你自己都說是無序了...又回來問順序...03/17 14:05
所以想知道Python的底層是怎麼排列的。內建擲骰子決定如何插入key嗎?
※ 編輯: shala (205.185.214.165), 03/17/2019 14:12:55
4F:→ djshen: 無序應該是指iterate時的順序和丟進去的順序不一樣03/17 14:09
5F:→ djshen: 內部的順序應該和hash function有關03/17 14:11
謝謝給方向,我再了解看看
※ 編輯: shala (205.185.214.165), 03/17/2019 14:20:11
6F:推 TitanEric: python的set跟dict是用hash實作的 不像紅黑書 無序正常 03/17 14:27
7F:推 ThxThx: CPython的id以及hash實作是跟記憶體位置有關 03/17 18:19
8F:→ ThxThx: 所以每次插進去set裡面的key都會不一樣 03/17 18:19
9F:→ adrianshum: 樓上大錯特錯。那只是 default 的 __hash__ 而已。 03/17 18:36
10F:→ adrianshum: str 的__hash__ 是基於其內容的。 03/17 18:37
11F:→ ThxThx: !!str的hash原來看內容,感謝糾正 03/17 18:41
12F:→ ThxThx: 不過object是看位址吧? 03/17 18:41
13F:推 HenryLiKing: 推!!!! 03/18 10:31