ホームページ >バックエンド開発 >Python チュートリアル >Python の通常の代入、浅いコピー、深いコピーの違いは何ですか?

Python の通常の代入、浅いコピー、深いコピーの違いは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-31 16:25:15198ブラウズ

What's the Difference Between Normal Assignment, Shallow Copy, and Deep Copy in Python?

さまざまなコピー操作を理解する: 通常の代入、浅いコピー、深いコピー

Python では、変数のコピーを作成するさまざまな方法がありますそしてオブジェクト。通常の代入操作、浅いコピー、および深いコピーは、元の変数とコピーされた変数の間の関係を処理する方法が異なります。

通常の代入

通常の代入操作 (例: 、a = b) 新しい変数が既存のオブジェクトを指すようにするだけです。両方の変数がメモリ内の同じオブジェクトを参照するようになりました。一方の変数に加えられた変更は、もう一方の変数に影響します。

浅いコピー

浅いコピーは、元のオブジェクトと同じ基になるデータを参照する新しいオブジェクトを作成します。不変オブジェクト (文字列、数値など) の場合、これは通常の代入と同等です。ただし、変更可能なオブジェクト (リスト、辞書など) の場合、新しいオブジェクトには元のオブジェクトへの参照が含まれます。

次のコード スニペットでは、

import copy

a = [1, 2, 3]
b = copy.copy(a)

a と b は両方ともリストです。 。 copy.copy を使用して をコピーすると、新しいリストが作成されますが、そのリストには a と同じリスト要素への参照が含まれています。したがって、b を変更すると a も変更されます。

ディープ コピー

ディープ コピーは、新しいオブジェクトを作成し、元のオブジェクトからすべてのデータを再帰的にコピーします。これは、元のオブジェクトに他の可変オブジェクトへの参照が含まれている場合でも、新しいオブジェクトにはそれらのオブジェクトの独立したコピーが存在することを意味します。

次のコード スニペットでは、

import copy

a = [1, 2, 3]
c = copy.deepcopy(a)

c はリスト要素の独自のコピーを含む新しいリスト。 c に加えられた変更は a には影響しません。

結論

コピー操作の選択は、特定の使用例によって異なります。不変オブジェクトの場合は、通常の代入または浅いコピーで十分です。変更可能なオブジェクトの場合は、コピーへの変更が元のオブジェクトに影響しないように、ディープ コピーを行うことをお勧めします。

以上がPython の通常の代入、浅いコピー、深いコピーの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。