同一の文字列に対する Python のメモリ割り当て
背景:
Python では、文字列オブジェクトを同一の文字は、同じメモリ空間を占有する場合もあり (id(a) == id(b))、別の場所に存在する場合もあります (id(a) != id(b))。この割り当て動作は、作成方法やコンテキストなどの要因によって異なります。
文字列の作成と割り当て:
文字列リテラル ("abc") が内部で定義されている場合関数の場合、その関数内で出現するそのリテラルはすべて、通常、同じメモリ空間を共有します。これは、インタプリタが関数のコンパイル中にリテラルを認識し、そのストレージを最適化するためです。
ただし、文字列が異なる関数間で作成される場合、または文字列が動的に構築される場合 (例: "a" "b")、メモリ割り当ての動作は予測しにくくなります。
ファイル入力とメモリ割り当て:
文字列のリストがファイルから作成され、その後メモリに読み込まれると、各文字列が別のメモリ場所に保存される場合があります。これは、ファイル操作には新しい文字列オブジェクトの作成が含まれ、インタープリタは既存の文字列オブジェクトを検索して再利用しようとしないためです。
Python 文字列メモリ割り当てについて:
Python実装では、メモリ使用量と割り当て速度の間のトレードオフのバランスがとれます。既存のオブジェクトの検索と共有が効率的である場合 (単一関数内など)、通常はメモリを節約するために行われます。ただし、複数のスコープまたはコンテキストにわたって同一のオブジェクトを見つけるのに時間がかかる場合、インタプリタは新しいオブジェクトを作成します。
歴史的脚注:
一部の言語、たとえばSPITBOL として、メモリを節約するためにすべての文字列を一意化する手法を開拓しました。このアプローチには利点がありますが、Python の現在の実装ではそのような戦略は採用されていません。
以上がPython が同じ文字列にメモリを割り当てるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。