首頁 >後端開發 >Python教學 >Python 3.6 字典實作如何提高記憶體使用並保留插入順序?

Python 3.6 字典實作如何提高記憶體使用並保留插入順序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-02 18:04:39654瀏覽

How Does Python 3.6  Dictionary Implementation Improve Memory Usage and Preserve Insertion Order?

Python 3.6:字典保留插入順序

從Python 3.6 開始,CPython 實作中的字典表現出插入順序,這與先前的插入順序,這與先前的版本有很大不同。此功能現已成為 Python 3.7 中保證的語言功能。

改進的記憶體使用和效能

與之前相比,新的字典實現顯著減少了 20-25% 的記憶體使用Python 3.5。此改進源自於實作中使用單獨的陣列:

  • dk_entries: 依插入順序儲存項目 (PyDictKeyEntry)。
  • dk_indices: 在dk_entries 中儲存條目的索引,充當散列table.

之前需要分配PyDictKeyEntry類型的稀疏數組,出於性能考慮導致數組,出於性能考慮空間浪費。新方法僅分配必要的條目,並採用 intX_t 類型的稀疏數組,這會消耗更少的記憶體。

使用的資料結構

最初,字典儲存為 [ keyhash, key, value] 位於稀疏數組中,其中空白條目以「--」表示。新方法將資料組織為:

  • 索引: [None, 1, None, None, None, 0, None, 2]
  • 條目: [[-9092791511155847987, 'timmy', 'red'],

            [-8522787127447073495, 'barry', 'green'],
            [-6480567542315338377, 'guido', 'blue']]
    

這個修改後的結構顯著減少了記憶體開銷。

插入的好處排序

雖然新的字典實現主要關注內存優化,但插入排序功能具有方便的應用:

  • 保留物件加入到物件的順序字典。
  • 自訂字典的顯示或迭代順序

需要注意的是,在不同的 Python 實作或未來的語言版本中,不能保證插入順序。然而,在 Python 3.7 及更高版本中,這是一個值得您信賴的有保證的功能。

以上是Python 3.6 字典實作如何提高記憶體使用並保留插入順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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