Python では、リストをスライスしても、リスト内の個々の要素のコピーは作成されません。代わりに、それらの要素への参照をコピーするだけです。これは、不変オブジェクト (整数など) と可変オブジェクト (辞書など) の両方に当てはまります。
これを実証するには、次のコード:
<code class="python">a = [1000 + 1, 1000 + 1, 1000 + 1] b = a[1:3]</code>
リスト a のオブジェクトは不変の整数ですが、スライスすると同じオブジェクトを参照する新しいリスト b が作成されます。これは、ID が同一であることから明らかです。
<code class="python">print(id(a[0]) == id(b[0])) # True print(id(a[1]) == id(b[1])) # True</code>
スライスでは、追加のリスト オブジェクトが作成されるため、ある程度のメモリ オーバーヘッドが発生します。ただし、このオーバーヘッドはリストの長さに関係なく一定であり、オブジェクト自体のサイズに比べれば通常は無視できます。
メモリの節約が最重要事項である場合は、Python リストの代わりに numpy 配列の使用を検討してください。 numpy 配列をスライスすると、元のデータにビューが作成され、同じメモリ空間を共有します。これは、大規模なデータ セットを使用するシナリオでは非常に有利です。
ただし、ビューの使用には、異なるビュー間での意図しない変更の可能性など、追加の考慮事項が伴うことに注意することが重要です。コードでの予期せぬ結果を避けるために、この動作を理解することが不可欠です。
以上がPython リストのスライスでは要素のコピーが作成されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。