首頁 > 後端開發 > Python教學 > Python 3.6 字典是否維護插入順序以及如何實作?

Python 3.6 字典是否維護插入順序以及如何實作?

Patricia Arquette
發布: 2024-12-30 09:23:20
原創
909 人瀏覽過

Do Python 3.6  Dictionaries Maintain Insertion Order and How Is This Implemented?

Python 3.6 中的字典是有順序的嗎?

在 Python 3.6 及更高版本中,字典表現出插入順序,這意味著它們保留插入順序添加鍵值對。無法在所有 Python 實作中保證此行為,僅適用於 CPython 解譯器。

提高 Python 3.6 字典實現的效率

Python 3.6 中的新字典實作利用兩個陣列來維護插入順序和高效的雜湊查找。

  • dk_entries: 依插入順序包含條目(鍵值對)。
  • dk_indices: 儲存對應的索引dk_entries 中的每個條目,充當雜湊

與先前使用的鍵值條目稀疏數組(dk_entries) 相比,此方法利用較小尺寸的整數數組(dk_indices),從而實現更緊湊的記憶體佔用。先前為效能最佳化而分配的稀疏數組已不再需要容納固定大小的 2/3 空白空間。

資料結構的視覺化

範例字典:

d = {'timmy': 'red', 'barry': 'green', 'guido': 'blue'}
登入後複製

舊數據結構:

entries = [['--', '--', '--'],
           [-8522787127447073495, 'barry', 'green'],
           ['--', '--', '--'],
           ['--', '--', '--'],
           ['--', '--', '--'],
           [-9092791511155847987, 'timmy', 'red'],
           ['--', '--', '--'],
           [-6480567542315338377, 'guido', 'blue']]
登入後複製

新數據結構:

indices =  [None, 1, None, None, None, 0, None, 2]
entries =  [[-9092791511155847987, 'timmy', 'red'],
            [-8522787127447073495, 'barry', 'green'],
            [-6480567542315338377, 'guido', 'blue']]
登入後複製

如圖所示,新結構將索引和條目分開,從而實現更有效率的記憶體分配由於索引尺寸較小,雜湊表查找速度更快

結論

Python 3.6 中增強的字典實作有效地維護了插入順序,同時透過使用單獨的條目和索引數組優化了記憶體使用。這種優化可以更有效地表示和管理字典,特別是在記憶體限製或處理大型字典的情況下。

以上是Python 3.6 字典是否維護插入順序以及如何實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板