ホームページ >バックエンド開発 >Python チュートリアル >Python 3.6 辞書は挿入順序を維持しますか? これはどのように実装されますか?
Python 3.6 では辞書の順序は決まっていますか?
Python バージョン 3.6 以降では、辞書は挿入順序を示します。つまり、辞書は挿入順序を保持します。キーと値のペアが追加されます。この動作はすべての Python 実装で保証されているわけではなく、CPython インタープリタにのみ適用されます。
Python 3.6 辞書実装の効率の向上
Python 3.6 の新しい辞書実装2 つの配列を利用して、挿入順序と効率的なハッシュの両方を維持しますlookups.
このアプローチでは、以前に使用されていたキーと値のエントリの疎な配列 (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 サイトの他の関連記事を参照してください。