首頁  >  文章  >  後端開發  >  為什麼 Python 2.7 和 3.3 之間的字典排序行為會變化,以及後來如何演變?

為什麼 Python 2.7 和 3.3 之間的字典排序行為會變化,以及後來如何演變?

DDD
DDD原創
2024-10-21 15:22:30966瀏覽

Why Did the Dictionary Ordering Behavior Change Between Python 2.7 and 3.3, and How Did It Evolve Later?

Python 2.7 與 Python 3.3 中的字典排序:為什麼會改變?

在 Python 2.7 中,字典鍵的排序是任意但一致的。然而,這種行為在 Python 3.3 中發生了變化,從 vars() 等方法獲得的鍵的順序似乎是不確定的。

這種不確定性源自於 2012 年實現的安全性修復,該修復預設啟用在Python 3.3。該修復引入了哈希隨機化以防止某些安全漏洞。結果,字典和集合的迭代順序變得不可預測。

在 Python 3.6 中,引入了 dict 類別的新實作來保留插入順序。因此,從 Python 3.7 開始,字典的順序保留行為現在得到了保證。

某些用例中的意外一致性

儘管排序是不確定的,但仍有維持一致秩序的情況。例如:

list({str(i): i for i in range(10)}.keys())

在Python 2.7 和Python 3.6(及更高版本)中,此表達式總是產生順序:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

這是因為反例使用集合理解,其中建立一個隱式有序字典。然而,在 Python 3.3 中,由於處理雜湊衝突的限制,順序可能仍然會有所不同。

以上是為什麼 Python 2.7 和 3.3 之間的字典排序行為會變化,以及後來如何演變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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