ホームページ > バックエンド開発 > Python チュートリアル > リストのコピーを変更すると元のコピーが変更される場合があるのはなぜですか: 浅いコピーと深いコピーでは?

リストのコピーを変更すると元のコピーが変更される場合があるのはなぜですか: 浅いコピーと深いコピーでは?

Patricia Arquette
リリース: 2024-12-08 09:09:11
オリジナル
383 人が閲覧しました

Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

リストをディープ コピーする方法: 浅いコピーと深いコピーを理解する

リスト E0 があり、リストを使用してコピー E0_copy を作成するとします。 (E0)。直感的には、E0_copy は ID が異なるため、ディープ コピーであると考えることができます。ただし、ループ内で E0_copy を変更すると、予期せず E0 も変更されます。なぜこのようなことが起こるのでしょうか?

浅いコピーの落とし穴

list(...) は浅いコピーを作成します。つまり、参照を保持しながら最も外側のリストのみを複製します。同じ内部リストに。したがって、E0_copy の内部リストを操作すると、両方のリストが同じ内部構造を指しているため、E0 にも影響します。

解決策: ディープ コピー

実行するにはディープコピーの場合は、copy.deepcopy(...) 関数を使用します。ネストされた構造を含むすべてのオブジェクトを再帰的にコピーすることにより、本物のディープ コピーを作成します。この操作により、コピーに加えられた変更が元のコピーに影響を与えないことが保証されます。

デモ

次のコード スニペットを考えてみましょう。list(...) の結果は浅いコピー:

a = [[1, 2, 3], [4, 5, 6]]
b = list(a)
print(a == b)  # True, indicates shallow copy
ログイン後にコピー

今度は、深いコピーには copy.deepcopy(...) を使用します。コピー:

import copy
b = copy.deepcopy(a)
print(a == b)  # False, confirms deep copy
ログイン後にコピー

ここで、a を変更しても b には影響せず、ディープ コピーによって提供される分離が実証されています。

以上がリストのコピーを変更すると元のコピーが変更される場合があるのはなぜですか: 浅いコピーと深いコピーでは?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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