シャローコピーとディープコピー
シャローコピーはオブジェクトの参照先をコピーする。
コピー元のオブジェクトとコピー先のオブジェクトが同じアドレスの値を参照する。
そのため片方のオブジェクトの値を変更すると、もう一方のオブジェクトの値も変更される。
https://gyazo.com/76c0d3df0a688b23072cfd053aeee5b7
一方でディープコピーはオブジェクトの値をコピーする
コピー元のオブジェクトとコピー先のオブジェクトがそれぞれ別のアドレスの値を参照する。
そのため片方のオブジェクトの値を変更しても、もう一方のオブジェクトの値は変更されない。
https://gyazo.com/1b9760be4975492ad661ccdb76c5bcca
pythonではスライスでリストをコピーした場合、普通のリストだと問題が無いが、多重リストだとシャローコピーになってしまう。
pythonでシャローコピーになってしまう例(多重リストをスライスでコピー)
code:python
b0.append(0) # b0(内部のリスト)はaと共通のものを参照している print(a) # aにも0が追加されている
print(b)
これを解決するにはcopy.deepcopyを使いディープコピーを行うと解決する。
code:python
from copy import deepcopy
b = deepcopy(a) # ディープコピー
b0.append(0) # b0(内部のリスト)はaとは別のオブジェクト print(a) # aに影響はない
print(b)
参考リンク