Pythonでは、変数の代入はデフォルトで参照として扱われます。つまり、b = a
とした場合、b
とa
は同じオブジェクトを指し、b
を変更するとa
も変わります。しかし、参照ではなく値をコピーしたい場合があります。そのような場合には、Pythonのcopy
モジュールを使用します。
import copy
# オブジェクトのシャローコピー
b = copy.copy(a)
# オブジェクトのディープコピー
b = copy.deepcopy(a)
copy.copy(a)
はa
のシャローコピー(浅いコピー)を作成します。これは、a
がリストや他のコンテナ型の場合、新しいリストやコンテナを作成しますが、その中の要素は元のa
と同じオブジェクトを参照します。
一方、copy.deepcopy(a)
はa
のディープコピー(深いコピー)を作成します。これは、a
がリストや他のコンテナ型の場合、新しいリストやコンテナを作成し、その中の要素も新しくコピーします。
このように、Pythonでは参照ではなく値をコピーするための方法が提供されています。これにより、オブジェクトの状態を保持しつつ、新しいオブジェクトで操作を行うことが可能になります。