セットをコピーする copy deepcopy
Pythonのセットのコピーには、リストと同様、浅いコピー(Shallow copy)と深いコピー(Deep copy)が存在する。
浅いコピーは、辞書の各要素をコピーしますが、その要素が参照するデータまではコピーしません。
深いコピーは、辞書の各要素もその要素が参照するデータもコピーします。
セットは変更可能な要素を持つことができないので基本的に浅いコピーで問題がありませんが、組み込みオブジェクト以外のオブジェクトをセットの要素にした場合は、深いコピーを使う必要が出てきます。
浅いコピーおよび深いコピーは以下のような構文です。
実際のコードを見たほうがわかりやすいので、以下にコードを示します。
浅いコピーは、辞書の各要素をコピーしますが、その要素が参照するデータまではコピーしません。
深いコピーは、辞書の各要素もその要素が参照するデータもコピーします。
セットは変更可能な要素を持つことができないので基本的に浅いコピーで問題がありませんが、組み込みオブジェクト以外のオブジェクトをセットの要素にした場合は、深いコピーを使う必要が出てきます。
浅いコピーおよび深いコピーは以下のような構文です。
import copy copy.copy(set) #浅いコピー copy.deepcopy(set) #深いコピーまた、浅いコピーには以下のような構文もあります。
set(set)setがコピー元のセットです。
実際のコードを見たほうがわかりやすいので、以下にコードを示します。
#!/usr/bin/env python # -*- coding: utf-8 -*- #コピーモジュールのインポート import copy #まずは、単純に代入 a = set([1,2,3,4]) b = a b.add(5) print a,b #aもbも書き換わります。 #次に浅いコピーを行います。 a = set([1,2,3,4]) b = copy.copy(a) b.add(5) print a,b #bのみ書き換わります。 #また浅いコピーは以下のような種類の構文でも可能です。 a = set([1,2,3,4]) b = set(a) b.add(5) print a,b #bのみ書き換わります。 #次に深いコピーを行います。 a = set([1,2,3,4]) b = copy.deepcopy(a) b.add(5) print a,b #bのみ書き換わります。以下が実行結果です。
>>> set([1, 2, 3, 4, 5]) set([1, 2, 3, 4, 5]) set([1, 2, 3, 4]) set([1, 2, 3, 4, 5]) set([1, 2, 3, 4]) set([1, 2, 3, 4, 5]) set([1, 2, 3, 4]) set([1, 2, 3, 4, 5])
スポンサーサイト