浅いコピーと深いコピーを理解する: 辞書の浅いコピーがオリジナルを更新しない理由
Python でデータ構造を操作する場合、次のことが重要です。浅いコピーと深いコピーの違いを理解する。浅いコピーでは元のデータ構造への新しい参照が作成されますが、深いコピーでは分離されたコンテンツを持つ完全に新しいデータ構造が作成されます。
辞書での浅いコピーの動作を調べてみましょう。提供された例では:
original = dict(a=1, b=2) new = original.copy() new.update({'c': 3})
オリジナルの辞書で copy() を呼び出すと、オリジナルと同じコンテンツを参照する新しいマッピング オブジェクト new が作成されます。これは浅いコピーとして知られています。 new が {'c': 3} で更新されると、new のみが影響を受けます。元のデータ構造と新しいデータ構造はどちらも、同じ基礎となるデータ構造を参照します。
Representation after shallow copy: original: | {a: 1, b: 2} | new: | {a: 1, b: 2} |
ただし、リストなどの変更可能なデータ構造を浅くコピーする場合は、次のようにします。
original = [1, 2, 3] new = original
新しいリストを変更します (new. append(4)) は、元のリスト (original) も変更します。
Representation after shallow copy for lists: original: | [1, 2, 3] | new: | [1, 2, 3] |
浅いコピーと深いコピーの主な違いは、その方法にあります。ネストされたデータ構造を処理します。ディープ コピーはすべてのコンテンツを値ごとに再帰的にコピーし、完全に分離されたデータ構造を作成します。
import copy c = copy.deepcopy(a)
Representation after deep copy: original: | {a: [1, 2, 3]} | c: | {a: [1, 2, 3]} |
要約すると、シャロー コピーは元のデータ構造を参照しますが、ディープ コピーはまったく新しい分離された構造を作成します。この区別は、可変データ構造を変更する場合に特に重要になります。
以上がPython 辞書の浅いコピーと深いコピー: なぜ `copy()` はオリジナルを更新しないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。