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 中,由於處理雜湊衝突的限制,順序可能仍然會有所不同。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3