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])
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント