Python のリスト オブジェクトの実装の詳細
Python プログラミング言語は、オブジェクト参照へのポインターの割り当てが過剰なベクトルとしてリストを実装します。リンクされたリストとは異なり、Python のリストはメモリ内の連続配列です。
これをさらに理解するために、Python ソース コードを詳しく調べてみましょう。
typedef struct { PyObject_HEAD Py_ssize_t ob_size; PyObject **ob_item; Py_ssize_t allocated; } PyListObject;
ここで、ob_item はポインタのベクトルです。リストの要素を表すオブジェクト参照へ。 ob_size は現在リストに格納されている要素の数を示し、allocated はベクトルの現在の容量を表します。
Python のリスト実装では、増分サイズ変更の戦略が採用されています。リストがその容量に達すると、listobject.c 内のコードは、より多くの要素を収容できるようにベクトルを再割り当てします。この再割り当ては、サイズを 2 倍にすることではなく、次の式に従ってサイズを拡大することによって行われます:
new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6); new_allocated += newsize;
ここで、newsize は要求されたサイズです。この式は、効率性の必要性とメモリ断片化の可能性のバランスをとります。
この実装は、リストから要素が削除されても縮小しないという点で、真の動的配列とは異なることに注意してください。その結果、Python のリストには空のスロットが含まれる可能性があり、パフォーマンスとメモリ使用量に影響を与える可能性があります。
以上がPython はメモリ管理やサイズ変更などのリスト オブジェクトをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。