ホームページ > バックエンド開発 > Python チュートリアル > Python リストのスライスでは要素のコピーが作成されますか?

Python リストのスライスでは要素のコピーが作成されますか?

Patricia Arquette
リリース: 2024-11-07 06:04:03
オリジナル
987 人が閲覧しました

Does Python List Slicing Create Copies of Elements?

コピーを生成せずに Python でリストをスライスする: 総合ガイド

中心的な概念: 参照コピーとオブジェクトコピー

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>
ログイン後にコピー

メモリ オーバーヘッドの調査

スライスでは、追加のリスト オブジェクトが作成されるため、ある程度のメモリ オーバーヘッドが発生します。ただし、このオーバーヘッドはリストの長さに関係なく一定であり、オブジェクト自体のサイズに比べれば通常は無視できます。

代替: 効率的なビューのための Numpy 配列

メモリの節約が最重要事項である場合は、Python リストの代わりに numpy 配列の使用を検討してください。 numpy 配列をスライスすると、元のデータにビューが作成され、同じメモリ空間を共有します。これは、大規模なデータ セットを使用するシナリオでは非常に有利です。

ただし、ビューの使用には、異なるビュー間での意図しない変更の可能性など、追加の考慮事項が伴うことに注意することが重要です。コードでの予期せぬ結果を避けるために、この動作を理解することが不可欠です。

以上がPython リストのスライスでは要素のコピーが作成されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート