Pythonでセットをコピー(copy)
この記事では、Pythonでセットをコピーする方法について説明します。浅いコピーと深いコピーの違い、そしてそれぞれの使用方法について解説します。
目次
浅いコピー
浅いコピーは、元のセットと同じ要素を持つ新しいセットを作成しますが、要素自体は共有されます。元のセットの要素を変更すると、コピーされたセットにも反映されます。
set1 = {1, 2, 3}
set2 = set1.copy()
set2.add(4)
print(set1) # 出力: {1, 2, 3}
print(set2) # 出力: {1, 2, 3, 4}
copy()メソッドは浅いコピーを作成します。元のセットとコピーされたセットは異なるオブジェクトですが、要素は共有しているため、一方のセットを変更すると他方にも影響が出ます。
深いコピー
深いコピーは、元のセットと完全に独立した新しいセットを作成します。元のセットの要素を変更しても、コピーされたセットには影響しません。セットの中にリストや辞書などの変更可能なオブジェクトが含まれている場合に有効です。
import copy
set1 = {1, 2, [3, 4]}
set2 = copy.deepcopy(set1)
set2.add(5)
set1.pop()
set1[1][0] = 100
print(set1) #出力: {2, [100,4]}
print(set2) #出力: {1, 2, [3, 4],5}
copy.deepcopy()関数は深いコピーを作成します。元のセットとコピーされたセットは完全に独立しています。
- 深いコピーは浅いコピーよりもメモリを消費します。
- ネストされた変更可能なオブジェクトを扱う場合に有効です。
コピーメソッドの比較
浅いコピーと深いコピーの使い分けは、セットの内容と使用方法によって異なります。要素が変更できないオブジェクトのみを含む場合は浅いコピーで十分です。変更可能なオブジェクトを含む場合は深いコピーを使用する必要があります。
適切なコピーメソッドを選択することで、プログラムの動作を正確に制御し、予期せぬバグを防ぐことができます。
サンプルコード
set1 = {1, 2, 3, {4,5}}
set2 = set1.copy()
set3 = copy.deepcopy(set1)
set2.add(4)
set1.pop()
print(set1) # 出力: {2,3,{4,5}}
print(set2) # 出力: {1, 2, 3, 4,{4,5}}
print(set3) # 出力: {1, 2, 3, {4, 5}}
関連記事
- Pythonでリストをコピー(copy, deepcopy)
- Pythonでセットを作成(set, セット内包表記)
- Pythonでセットに要素を追加(add, update)
- Pythonでセットから要素を削除(remove, discard, pop, clear)
- Pythonでセットの要素の存在を確認(in演算子)
- Pythonでセットの積集合・和集合・差集合を求める(&, |, -, intersection, union, difference)
- Pythonでセットの要素数を取得(len)
- Pythonでセットをループ処理(for element in set)
- Pythonでfrozensetを使う
- Pythonで辞書をコピー(copy, deepcopy)