Pythonでは、クラスオブジェクトの複製を行うためにcopyモジュールを使用します。具体的には、copy.copy()とcopy.deepcopy()の二つの関数が提供されています。
copy.copy()は浅いコピーを作成し、copy.deepcopy()は深いコピーを作成します。これらの違いは、複合オブジェクト(リストやクラスインスタンスなど他のオブジェクトを含むオブジェクト)に関連しています。
以下に、クラスオブジェクトの複製の例を示します。
import copy
class A:
def __init__(self):
self.x = 0
self.y = []
a = A()
b = copy.deepcopy(a)
a.x = 13
a.y.append(0)
print(a.x, a.y) # -> 13 [0]
print(b.x, b.y) # -> 0 []
この例では、copy.deepcopy()を使用してクラスAのインスタンスaを複製しています。その結果、aとbは独立したオブジェクトとなり、一方を変更しても他方に影響を与えません。
ただし、クラス自体を複製することはできません。つまり、copy.copy(A)やcopy.deepcopy(A)を試みても、同じクラスAの参照が返されます。
以上がPythonでクラスオブジェクトを複製する基本的な方法です。適切な関数を選択することで、Pythonのクラスオブジェクトを効果的に管理することができます。.