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

看板Python作者 (0x5f3759df)時間5年前 (2019/03/17 17:41), 5年前編輯推噓3(300)
留言3則, 3人參與, 5年前最新討論串2/3 (看更多)
猜測你大概新增了一些字串物件到一個 Python set 如下 MacBook-Pro:~ lilohuang$ cat test.py print(list(set(['a', 'b', 'c', 'd']))) 執行 test.py 多次的話會產生出不同的順序的結果 MacBook-Pro:~ lilohuang$ python test.py ['d', 'a', 'b', 'c'] MacBook-Pro:~ lilohuang$ python test.py ['a', 'd', 'c', 'b'] MacBook-Pro:~ lilohuang$ python test.py ['a', 'c', 'd', 'b'] MacBook-Pro:~ lilohuang$ python test.py ['b', 'c', 'd', 'a'] 原因在於 Python 預設使用隨機的 hash seed 在 str, bytes 跟 datetime https://docs.python.org/3/using/cmdline.html#envvar-PYTHONHASHSEED 多次執行 Python 得到的 seed 值就會不同,進而產生出了不同的 hash 值 在執行前加上了 PYTHONHASHSEED=0 應該就能得到相同的答案了吧? MacBook-Pro:~ lilohuang$ PYTHONHASHSEED=0 python test.py ['a', 'b', 'c', 'd'] MacBook-Pro:~ lilohuang$ PYTHONHASHSEED=0 python test.py ['a', 'b', 'c', 'd'] MacBook-Pro:~ lilohuang$ PYTHONHASHSEED=0 python test.py ['a', 'b', 'c', 'd'] 當物件的 hash 值是固定的時候,set 是如何找到空 slot 新增 entry 可參考 https://github.com/python/cpython/blob/master/Objects/setobject.c -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 35.234.29.115 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1552815714.A.161.html ※ 編輯: LiloHuang (35.234.29.115), 03/17/2019 17:47:48

03/17 18:20, 5年前 , 1F
太感謝啦,比我自己查到的還清楚明白
03/17 18:20, 1F

03/17 21:40, 5年前 , 2F
給推
03/17 21:40, 2F

03/19 10:16, 5年前 , 3F
舔!
03/19 10:16, 3F
文章代碼(AID): #1SZXPY5X (Python)
文章代碼(AID): #1SZXPY5X (Python)