首頁  >  文章  >  後端開發  >  為什麼 Python 3 字典鍵排序是非確定性的?

為什麼 Python 3 字典鍵排序是非確定性的?

Barbara Streisand
Barbara Streisand原創
2024-10-21 15:07:301000瀏覽

Why Is Python 3 Dictionary Key Ordering Non-Deterministic?

Python 3 中字典鍵的非確定性排序

在Python 2 中,字典鍵的順序是一致的,但不能保證。然而,在 Python 3 中,從 vars() 等函數獲取的字典鍵的順序似乎是不確定的。

非確定性的原因

此變更是歸因於 Python 3.3 中實施的安全修復。為了防止雜湊值可預測,在雜湊計算中使用隨機種子。這種隨機化會導致字典鍵的順序無法預測。

在 Python 3.6 及更高版本中保留順序

在 Python 3.6 中,引入了一種新的字典實現,它保留了預設插入順序。從 Python 3.7 開始,Python 語言規範保證了此行為。

反轉非確定性

要停用雜湊隨機化並恢復到先前的行為,請設定PYTHONHASHSEED 環境變數設定為 0。但是,請注意,出於安全原因,不建議這樣做。

異常:設定鍵

與字典不同,Python 中的集合始終維護插入順序,無論 Python 版本為何。

範例:一致的字典鍵排序

雖然字典鍵在 Python 3.3 中是不確定的,但使用集合將字典鍵轉換為字串保留順序。例如:

這將始終返回列表['0', '1', '2', '3', '4', '5', '6', '7' , ' 8', '9'].

其他信息

有關哈希隨機化的更多詳細信息,請參閱object.__hash__() 文件。

以上是為什麼 Python 3 字典鍵排序是非確定性的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn