Pythonの代入は、変数をオブジェクトにバインドするが、他の言語のようにコピーを作成するわけではない。 この違いは、ミュータブルオブジェクトの場合に非常に重要である。 シャローコピーは新しいオブジェクトを作成するが、ネストされたオブジェクトを共有するため、潜在的な問題が発生する可能性がある。 ディープコピーは、完全な独立性を確保するためにすべてのオブジェクトを再帰的に複製する。 `copy`モジュールは、シャローコピー用の`copy()`とディープコピー用の`deepcopy()`を提供する。 カスタムクラスは、`__copy__()`と`__deepcopy__()`を使用してコピーの動作を定義できる。 オブジェクトは、スカラー(不可分)またはコンポジット(コンテナ)に分類される。 コンポジットオブジェクトは、ミュータブル(変更可能)またはイミュータブル(変更不可能)である。 変更可能性はコピー戦略に影響し、イミュータブルオブジェクトは再利用の利点がある一方で、ミュータブルオブジェクトは意図しない変更を避けるためにディープコピーが必要になる場合がある。 これらの概念を理解することは、複雑なデータ構造を効果的に管理するために不可欠である。 この記事は、防御的プログラミングと独立したデータスナップショットの作成のためにコピーの重要性を強調している。 シャローコピーとディープコピーの選択は、アプリケーションの特定のニーズに依存する。
realpython.com
Real Python: Shallow vs Deep Copying of Python Objects
Create attached notes ...