2021-04-02に投稿

Python 標準ライブラリ copy シャローコピーとディープコピー

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])
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント