Pythonでは、代入文はオブジェクトをコピーせず、ターゲットとオブジェクトの間にバインディングを作成します。 私たちが使用するとき=
演算子ユーザーは、これが新しいオブジェクトを作成すると考えています。 ユーザーは、これらのオブジェクトの”実際のコピー”または”クローン”を作成する方法を探すために、変更可能なオブジェクトを操作したい場合があります。, または、ユーザーがオブジェクトのコピーを作成するために、オリジナルを同時に自動的に変更せずに変更できるコピーをユーザーが望むことがあります。
一方が他方を変更せずに一方のコピーを変更できるように、コピーが必要になることがあります。 Pythonでは、コピーを作成する二つの方法があります。
- ディープコピー
- 浅いコピー
これらのコピーを作成するために、copy
モジュールを使用します。 浅いコピー操作と深いコピー操作には、copy
モジュールを使用します。,>
li2
=
copy.copy(li1)
li3
=
copy.deepcopy(li1)
上記のコードでは、copy()
はリストの浅いコピーを返し、deepcopy()
はリストの深いコピーを返します。,
ディープコピー
ディープコピーは、コピー処理が再帰的に行われるプロセスです。 この最初の構築新しいコレクションオブジェクトを再帰的にpopulatingでの子オブジェクトのオリジナルです。 詳細コピーの場合、オブジェクトのコピーは他のオブジェクトにコピーされます。 つまり、オブジェクトのコピーに加えられた変更は、元のオブジェクトに反映されません。 Pythonでは、これは”deepcopy()”関数を使用して実装されています。,
出力:
The original elements before deep copying1 2 4 The new list of elements after deep copying 1 2 4 The original elements after deep copying1 2 4
上記の例では、リストに加えられた変更は、リストがディープコピーされていることを示す、他のリストには影響しませんでした。
シャローコピー
シャローコピーとは、新しいコレクションオブジェクトを構築し、元のオブジェクトにある子オブジェクトへの参照を設定することを意味します。 コピープロセスは再帰しないため、子オブジェクト自体のコピーは作成されません。, 浅いコピーの場合、オブジェクトの参照は他のオブジェクトにコピーされます。 つまり、オブジェクトのコピーに加えられた変更は、元のオブジェクトに反映されます。 Pythonでは、これは”copy()”関数を使用して実装されています。
出力:
The original elements before shallow copying1 2 4 The original elements after shallow copying1 2 4
上記の例では、リストに加えられた変更は、リストが浅いコピーされていることを示す、他のリストに,
重要なポイント:
シャローコピーとディープコピーの違いは、複合オブジェクト(リストやクラスインスタンスなどの他のオブジェクトを含むオブジェクト)にのみ関連します。
- シャローコピーは新しい複合オブジェクトを構築し、可能な限り元のオブジェクトに参照を挿入します。
- ディープコピーは、新しい複合オブジェクトを構築し、再帰的に、元のオブジェクトにあるオブジェクトのコピーをそのオブジェクトに挿入します。
注目オタク!, Pythonプログラミング基礎コースで基礎を強化し、基礎を学びます。
まず、インタビューの準備では、Python DSコースでデータ構造の概念を強化します。