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中文網其他相關文章!