ホームページ > バックエンド開発 > Python チュートリアル > Python 辞書の浅いコピーと深いコピー: `copy()` が失敗するのはどのような場合ですか?

Python 辞書の浅いコピーと深いコピー: `copy()` が失敗するのはどのような場合ですか?

Mary-Kate Olsen
リリース: 2024-11-22 20:20:13
オリジナル
255 人が閲覧しました

Shallow vs. Deep Copy in Python Dictionaries: When Does `copy()` Fail?

Python の浅いコピーと深いコピー: 辞書への影響を理解する

辞書を使用して作成された、Python の辞書の浅いコピー.copy() では、元の辞書が期待どおりに更新されない可能性があります。この動作は、浅いコピーと深いコピーの概念に由来しています。

浅いコピーとは何ですか?

浅いコピーでは、辞書の内容が参照されます。値によってコピーされるよりも。これは、元の辞書とコピーされた辞書の両方が、同じ基礎となるデータ構造を指していることを意味します。

デモ:

>> original = dict(a=1, b=2)
>> new = original.copy()
>> new.update({'c': 3})
>> original
{'a': 1, 'b': 2}
ログイン後にコピー

予想に反して、元の辞書は変更されません。浅いコピーが更新された後。これは、データへの参照がコピーではなく共有されるためです。

リストの違い:

辞書とは異なり、リストを浅くコピーすると、データへの参照が共有されます。データ。これは、リストには参照による値が含まれているためです。

>> original = [1, 2, 3]
>> new = original
>> new.append(4)
>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
ログイン後にコピー

この場合、元のリストと新しいリストの両方が同じデータを参照するため、一方に加えられた変更は他方にも影響します。

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

辞書の完全に別個のコピー (その内容も含む) を作成するには、 copy.deepcopy() を使用する必要があります。この関数は、構造と値を値ごとにコピーし、完全な分離を保証します。

import copy
>> original = dict(a=1, b=2)
>> new = copy.deepcopy(original)
>> new.update({'c': 3})
>> original
{'a': 1, 'b': 2}
>> new
{'a': 1, 'c': 3, 'b': 2}
ログイン後にコピー

コピー操作のタイプ:

  1. 参照割り当て (a = b): 両方の変数が同じものを指しますobject.
  2. 浅いコピー (b = a.copy()): オブジェクトは分離されていますが、基礎となるデータは共有されています。
  3. 深いコピー (b = copy) .deepcopy(a)): 完全に分離されており、異なる構造と値を持ちます。

以上がPython 辞書の浅いコピーと深いコピー: `copy()` が失敗するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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