Python 標準ライブラリ copy シャローコピーとディープコピー
Publish date: 2021-03-29
Pythonの標準にあるcopyモジュールはシャローコピーとディープコピーを行うためのインターフェースを提供しています。
使い方
import copy
class SampleClass:
def __init__(self, name, ar):
self.name = name
self.ar = ar
def __repr__(self):
return f'SampleClass(name={self.name}, ar={self.ar})'
def __str__(self):
return f'SampleClass(name={self.name}, ar={self.ar})'
sc = SampleClass('Taro', [1, 2, 3])
items = [1, 2, 3]
# copy(x) 浅い (shallow) コピー
items_shallow_copy = copy.copy(items)
items_shallow_copy # => [1, 2, 3]
sc_shallow_copy = copy.copy(sc)
sc_shallow_copy # => SampleClass(name=Taro, ar=[1, 2, 3])
# deepcopy(x[, memo]) 深い (deep) コピー
items_deep_copy = copy.deepcopy(items)
items_deep_copy # => [1, 2, 3]
sc_deep_copy = copy.deepcopy(sc)
sc_deep_copy # => SampleClass(name=Taro, ar=[1, 2, 3])
# 値の書き換え
items[2] = '20'
sc.name = 'Jiro'
sc.ar[2] = 200
# 変更の確認
items_shallow_copy # => [1, 2, 3]
sc_shallow_copy # => SampleClass(name=Taro, ar=[1, 2, 200])
items_deep_copy # => [1, 2, 3]
sc_deep_copy # => SampleClass(name=Taro, ar=[1, 2, 3])