同一文字列に対する Python のメモリ割り当て
Python では、同じ文字を持つ文字列がメモリを共有することがあります (a == b, id(a) == id(b) )) または個別に保存することもできます (id(a) != id(b))。
文字列メモリ割り当て
Python の文字列メモリ割り当てには、次の 2 種類の文字列が含まれます:
-
Ustrings: メモリを節約し、比較を最適化するために Ucache に保存される一意の文字列。
-
Ostrings: メモリ内に複数のインスタンスを持つ可能性があるその他の文字列。
Python は文字列を動的に割り当てます。つまり、必要に応じて新しいコピーを作成します。ただし、特定のシナリオでは既存の文字列の再利用も試行します。
新しいメモリ割り当てのシナリオ
Python は通常、次の場合に同一の文字列に新しいメモリを割り当てます。
-
ファイルまたは外部ソースからの文字列: ファイルからデータを読み取るとき、文字列の各インスタンスは個別のオブジェクトとして扱われます。
-
新しいオブジェクトを文字列変数に代入する: 割り当てられたオブジェクトがメモリ内の既存の文字列と同じ値を持つ場合でも、新しいメモリ割り当てが行われます。
メモリを再利用するシナリオ
Python は既存の文字列を再利用する可能性があります次の場合の文字列:
-
単一関数内の同じ文字列リテラル: 関数内で同じ文字列リテラルが複数回出現する場合、通常、インタープリターは既存のオブジェクトを再利用します。
-
intern(string) による内部: intern(string) を呼び出すと、文字列が強制的に Ucache に保存され、コピーが 1 つだけ存在することが保証されます。
文字列メモリ割り当ての最適化
Python で文字列メモリ割り当てを最適化するには、次のテクニックを検討してください:
-
文字列リテラルを使用します: 奨励するために、可能な限り文字列をリテラルとして宣言します。再利用。
-
インターン(文字列) を使用する: 頻繁に使用される文字列の場合、インターンを使用して Ucache ストレージを強制します。
-
カスタム定数プール戦略を実装します: 大きくて頻繁に複製される不変オブジェクトの場合は、コピーを再利用する独自のメカニズムを作成します。
以上が同じ文字列に対する Python のメモリ割り当てに影響を与える要因はどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。