Pythonでは、変数をコピーするときに参照ではなく値をコピーする方法があります。これは、特にリストや辞書などの複合データ型を扱うときに重要です。以下にその方法を説明します。
値によるコピー
Pythonでは、=
演算子を使用して変数をコピーすると、新しい変数は元の変数への参照となります。つまり、新しい変数を変更すると、元の変数も変更されます。これは、参照によるコピーと呼ばれます。
しかし、参照ではなく値によるコピーを行いたい場合があります。そのためには、Pythonのcopy
モジュールを使用します。
import copy
original = [1, 2, 3]
copied = copy.copy(original)
このコードでは、original
リストの値によるコピーがcopied
に作成されます。したがって、copied
を変更してもoriginal
は変更されません。
深いコピー
しかし、リストや辞書などの複合データ型の中にさらに複合データ型が含まれている場合、copy.copy()
関数を使用した場合でも、内部の複合データ型は参照としてコピーされます。これを防ぐためには、copy.deepcopy()
関数を使用します。
import copy
original = [1, 2, [3, 4]]
copied = copy.deepcopy(original)
このコードでは、original
リストの深いコピーがcopied
に作成されます。したがって、copied
の内部リストを変更しても、original
の内部リストは変更されません。
以上が、Pythonで変数を参照ではなく値でコピーする方法です。これらの方法を理解し、適切に使用することで、予期しないバグを防ぐことができます。