ホームページ  >  記事  >  バックエンド開発  >  Python 辞書の浅いコピーを更新してもオリジナルには影響しないのはなぜですか?

Python 辞書の浅いコピーを更新してもオリジナルには影響しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-23 22:43:12731ブラウズ

Why Doesn't Updating a Shallow Copy of a Python Dictionary Affect the Original?

Python 辞書の浅いコピーを理解する: コピーの更新がオリジナルに影響を与えない理由

Python 辞書を使用する場合、次のことが重要です。浅いコピーと深いコピーの違いを理解する。浅いコピーでは、元の辞書と同じオブジェクトへの参照を含む新しい辞書が作成されますが、深いコピーでは、オブジェクトのコピーを含む新しい辞書が作成されます。

dict.copy() による浅いコピー

dict.copy() メソッドは、辞書の浅いコピーを実行します。これは、新しい辞書には、元の辞書に格納されているのと同じオブジェクトへの参照が含まれることを意味します。その結果、コピーに加えられた変更は元の辞書にも反映されます。

例:

original = {'a': 1, 'b': 2}
new = original.copy()
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

この例では、dict.copy () メソッドは、元の辞書と同じオブジェクトへの参照を含む新しい辞書 new を作成します。 {'c': 3} でコピーを更新すると、オリジナルとコピーの両方にこの変更が反映されます。

コピーの更新がオリジナルに影響を与えない理由

浅いコピーの更新が元のコピーに影響を与えない理由は、コピーにはオブジェクトへの参照のみが含まれるためです。コピーを更新するとき、実際のオブジェクトは変更されず、参照のみが変更されます。

これは、浅いコピーにはリスト内の要素ではなくリスト自体への参照が含まれるリストとは対照的です。リストのコピーを更新すると、リスト内の要素が更新され、コピーとオリジナルの両方に影響します。

copy.deepcopy() によるディープ コピー

オリジナルから完全に分離された辞書のコピーを作成するには、copy.deepcopy() 関数を使用できます。この関数は、ディクショナリ内のすべてのオブジェクトを再帰的にコピーし、個別の参照を持つ新しい構造を作成します。

例:

import copy

original = {'a': 1, 'b': 2}
new = copy.deepcopy(original)
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

この例では、copy.deepcopy( ) 関数は、元の辞書内のオブジェクトのコピーを含む新しい辞書 new を作成します。コピーを更新しても、元の辞書は影響を受けません。

以上がPython 辞書の浅いコピーを更新してもオリジナルには影響しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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