Solved
Pythonのcopy.deepcopyとcopy.copyの違い
Taro · 6/11/2026 · 30 views
リストの中にリストが入っているようなネストしたデータをコピーしたいのですが、copy.copyだと元のデータも一緒に変わってしまいます。なぜですか?
Taro · 6/11/2026 · 30 views
リストの中にリストが入っているようなネストしたデータをコピーしたいのですが、copy.copyだと元のデータも一緒に変わってしまいます。なぜですか?
copy.copyは「浅いコピー(シャローコピー)」なので、一番外側のオブジェクトだけを新しく作り、中身の要素(ネストしたリストや辞書など)は元のオブジェクトへの参照をそのまま使い回します。そのため、コピー後にネストした部分を変更すると、コピー元にも影響してしまいます。
copy.deepcopyは「深いコピー(ディープコピー)」で、ネストしている中身も再帰的にすべて新しく複製します。なので完全に独立したコピーが欲しい場合はdeepcopyを使う必要があります。
import copy a = [[1, 2], [3, 4]] b = copy.copy(a) # 浅いコピー:b[0]を変更するとaにも影響 c = copy.deepcopy(a) # 深いコピー:完全に独立
なお、ネストがない単純なリスト(数値や文字列だけ)であれば copy.copy でも実質的に問題は起きません。ネストした可変オブジェクトが含まれる場合にだけ違いが表面化する、という点を覚えておくとよいです。
✓ This question has been solved