首頁  >  文章  >  後端開發  >  Python 中的字典排序何時變成非確定性?

Python 中的字典排序何時變成非確定性?

Patricia Arquette
Patricia Arquette原創
2024-10-21 15:09:02518瀏覽

When Did Dictionary Ordering in Python Become Non-Deterministic?

Python 中的非確定性字典排序:解釋

Python 中的字典排序在版本2.7 和3.3 之間發生了重大變化。在Python 2.7中,字典鍵的順序保持一致且任意,而在Python 3.3中,順序變得不可預測。這種非確定性引發了關於其根本原因及其如何影響 Python 字典行為的問題。

非確定性的來源

非確定性本質Python 3.3 中字典排序的功能源自於 2012 年實施的安全性修復,在 Python 3.3 中預設活化。此安全措施引入了“哈希隨機化”,該過程使字典的迭代順序不可預測,以防止安全漏洞。

雜湊隨機化的說明

雜湊隨機化涉及更改用於確定字典中元素位置的雜湊函數。透過更改雜湊函數,儲存和檢索金鑰的順序變得不可預測,並且在不同的 Python 運行中會有所不同。這種增加的不可預測性層使惡意行為者更難利用可預測的雜湊函數,從而增強了 Python 應用程式的安全性。

對字典排序的影響

引入雜湊隨機化對字典鍵的排序有重要影響。依賴字典鍵排序的應用程式可能會在 Python 3.3 及後續版本中遇到意外行為。例如,使用 vars() 顯示變數的順序可能會因運行而異。

選擇案例中的一致排序

儘管 Python 中的排序是不確定的3.3,某些情況下仍然表現出一致的排序。例如,使用列表理解構造的字典中鍵的順序仍然是可預測的,因為原始列表中鍵的順序被保留。

停用雜湊隨機化(可選)

在受雜湊隨機化影響的舊版Python 中,可以透過將PYTHONHASHSEED 環境變數設為0 來停用它。但是,不建議這樣做,因為它會降低哈希隨機化的安全優勢。

未來更新

在 Python 3.6 中,引入了 dict 的新實現,可以保留插入順序。此外,在 Python 3.7 中,這種順序保留行為得到了保證,從而確保這些版本及更高版本中字典順序的一致性。

以上是Python 中的字典排序何時變成非確定性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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