こんてんつ
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
というリストを用意し、copy
とdeepcopy
によって浅いコピーと深いコピーを作成した。その後、original_list
の最初の要素を99に変更した。この変更は、copy
にも影響するが、deep_copy
には影響しない。
よって、浅いコピーは元のオブジェクトの中にあるオブジェクトを参照するため、元のオブジェクトが変更されると、浅いコピーも変更さる。一方、深いコピーは元のオブジェクトと完全に独立しているため、元のオブジェクトが変更されても、深いコピーは変更されない。