【Python】copyとdeepcopyの違い

こんてんつ

copyモジュールの浅いcopyと深いコピーdeepcopyの違いについて例を使って説明する。

結論

  • deepcopy:新しい複合オブジェクトを作成し、その中にコピーを挿入する。よって、元のオブジェクトとコピーされたオブジェクトは完全に独立している。
  • copy:新しい複合オブジェクトを作成し、その中に元のオブジェクトに対する参照を挿入する。よって、コピーされたオブジェクトは元のオブジェクトの参照のみである。

コード

import copy

original_list = [[1, 2], [3, 4]]
normal_copy = copy.copy(original_list)
deep_copy = copy.deepcopy(original_list)

original_list[0][0] = 99

print(f'Original list: {original_list}')
print(f'normal_copy: {normal_copy}')
print(f'Deep copy: {deep_copy}')

実行結果

解説

original_listというリストを用意し、copydeepcopyによって浅いコピーと深いコピーを作成した。その後、original_listの最初の要素を99に変更した。この変更は、copyにも影響するが、deep_copyには影響しない。

よって、浅いコピーは元のオブジェクトの中にあるオブジェクトを参照するため、元のオブジェクトが変更されると、浅いコピーも変更さる。一方、深いコピーは元のオブジェクトと完全に独立しているため、元のオブジェクトが変更されても、深いコピーは変更されない。