ホームページ >バックエンド開発 >Python チュートリアル >Python の浅いコピーと深いコピー: いつどちらを使用するか?

Python の浅いコピーと深いコピー: いつどちらを使用するか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 10:09:10210ブラウズ

Shallow vs. Deep Copy in Python: When to Use Which?

浅いコピー、深いコピー、割り当て操作の理解

通常の割り当ての非効率

通常の代入操作では、新しいオブジェクトを作成するのではなく、既存のオブジェクトへの参照を作成するだけです。 1つ。元のオブジェクトへの変更はコピーされたオブジェクトにも反映されるため、予期しない変更が発生する可能性があります。

浅いコピー: サーフェスレベルの複製

浅いコピーcopy メソッドは、新しいオブジェクトを構築し、元のオブジェクト内に含まれる既存のオブジェクトへの参照を挿入します。これは、元のオブジェクトの子オブジェクトへの変更が浅いコピーにも反映されることを意味します。

ディープ コピー: 完全なレプリケーション

ディープ コピー メソッドは、新しいオブジェクトを作成します。そして、元のオブジェクト内で見つかったオブジェクトのコピーを再帰的に挿入します。これにより、元のオブジェクトの子オブジェクトに加えられた変更がディープ コピーに影響を与えないことが保証されます。

可変オブジェクトと不変オブジェクトの影響

これらのコピー操作は、次のオブジェクトに対してさまざまな影響を及ぼします。可変オブジェクトと不変オブジェクト:

  • 不変オブジェクト (例: 文字列、タプル): 不変オブジェクトは変更できないため、浅いコピーと深いコピーには違いはありません。
  • 可変オブジェクト (例: リスト、辞書): 浅いコピーは元のオブジェクトの子オブジェクトへの参照を保持しますが、深いコピーはこれらの子の新しいインスタンスを作成します

次のコードを考えてみましょう:

import copy

a = "deepak"
b = (1, 2, 3, 4)
c = [1, 2, 3, 4]
d = {1: 10, 2: 20, 3: 30}

a1 = copy.copy(a)
b1 = copy.copy(b)
c1 = copy.copy(c)
d1 = copy.copy(d)

文字列やタプルのような不変オブジェクトの場合 (a と bこの場合)、浅いコピーと深いコピーの両方で、異なるメモリ アドレスを持つ新しいオブジェクトが作成されます。ただし、リストや辞書 (c および d) などの変更可能なオブジェクトの場合、浅いコピーでは元のオブジェクトへの新しい参照が作成され、深いコピーではこれらのオブジェクトの新しいインスタンスが作成されます。

以上がPython の浅いコピーと深いコピー: いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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