E0_copy
ディープコピーではありません。を使用してディープ コピーを作成することはありませんlist()
。( と は両方ともlist(...)
浅いtestList[:]
コピーです。)
copy.deepcopy(...)
リストのディープコピーに使用します。
deepcopy(x, memo=None, _nil=[])
Deep copy operation on arbitrary Python objects.
次のスニペットを参照してください -
>>> a = [[1, 2, 3], [4, 5, 6]]
>>> b = list(a)
>>> a
[[1, 2, 3], [4, 5, 6]]
>>> b
[[1, 2, 3], [4, 5, 6]]
>>> a[0][1] = 10
>>> a
[[1, 10, 3], [4, 5, 6]]
>>> b # b changes too -> Not a deepcopy.
[[1, 10, 3], [4, 5, 6]]
今deepcopy
操作を参照してください
>>> import copy
>>> b = copy.deepcopy(a)
>>> a
[[1, 10, 3], [4, 5, 6]]
>>> b
[[1, 10, 3], [4, 5, 6]]
>>> a[0][1] = 9
>>> a
[[1, 9, 3], [4, 5, 6]]
>>> b # b doesn't change -> Deep Copy
[[1, 10, 3], [4, 5, 6]]
説明するためlist(...)
に、内部オブジェクトのコピーを再帰的に作成しません。同じ内部リストを参照しながら、最も外側のリストのコピーのみを作成するため、内部リストを変更すると、変更は元のリストと浅いコピーの両方に反映されます。id(a[0]) == id(b[0])
whereを確認すると、浅いコピーが内部リストを参照していることがわかりますb = list(a)
。