リストのディープ コピーを作成するには?
Python では、list() を使用してリストを新しい変数に代入しても、ディープコピーが作成されます。これは単に浅いコピーを作成するだけであり、内部要素は引き続き元のリストを参照します。これにより、予期しない突然変異が発生する可能性があります。
たとえば、次のコードを考えてみましょう。
E0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for k in range(3): E0_copy = list(E0) E0_copy[k][k] = 0 print(E0) # [[0, 2, 3], [4, 0, 6], [7, 8, 0]]
この例では、list() は最も外側のリストのみを複製するため、E0_copy はディープ コピーではありません。内部要素は引き続き E0 の同じオブジェクトを指します。 E0_copy を変更すると、その変更は E0 にも反映されます。
本物のディープ コピーを作成するには、copy.deepcopy() 関数を使用する必要があります。この関数はリストのすべての要素を再帰的にコピーし、元のリストから完全に独立していることを保証します。
ディープ コピーを使用して前の例を記述する方法は次のとおりです。
import copy E0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for k in range(3): E0_copy = copy.deepcopy(E0) E0_copy[k][k] = 0 print(E0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
注意E0_copy を変更した後も、元のリスト E0 は変更されないままであることがわかります。これは、copy.deepcopy() が元のリストに関連付けられていない完全に新しいリストを作成するためです。
以上がPython でリストの真のディープ コピーを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。