ホームページ >バックエンド開発 >Python チュートリアル >Python 3.6 辞書は挿入順序を維持しますか? これはどのように実装されますか?

Python 3.6 辞書は挿入順序を維持しますか? これはどのように実装されますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-30 09:23:20906ブラウズ

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 の新しい辞書実装2 つの配列を利用して、挿入順序と効率的なハッシュの両方を維持しますlookups.

  • dk_entries: 挿入順にエントリ (キーと値のペア) が含まれます。
  • dk_indices: 対応するインデックスを格納しますdk_entries の各エントリに、ハッシュとして機能しますtable.

このアプローチでは、以前に使用されていたキーと値のエントリの疎な配列 (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']]

図に示すように、新しい構造はインデックスとエントリを分離し、より効率的なメモリ割り当てを可能にします。インデックスのサイズが小さいため、ハッシュ テーブルの検索が高速化されます。 array.

結論

Python 3.6 の拡張辞書実装では、個別のエントリ配列とインデックス配列を使用することでメモリ使用量を最適化しながら、挿入順序を効果的に維持します。この最適化により、特にメモリの制約があるシナリオや大きな辞書が処理される場合に、辞書の表現と管理がより効率的に行われます。

以上がPython 3.6 辞書は挿入順序を維持しますか? これはどのように実装されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。