ホームページ  >  記事  >  バックエンド開発  >  Python 辞書の浅いコピーと深いコピー: なぜ `copy()` はオリジナルを更新しないのでしょうか?

Python 辞書の浅いコピーと深いコピー: なぜ `copy()` はオリジナルを更新しないのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-24 04:36:14755ブラウズ

Shallow vs. Deep Copy in Python Dictionaries: Why Doesn't `copy()` Update the Original?

浅いコピーと深いコピーを理解する: 辞書の浅いコピーがオリジナルを更新しない理由

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 サイトの他の関連記事を参照してください。

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