如何在python中有选择地进行深度复制?

如何在python中有选择地进行深度复制?,python,python-3.x,deep-copy,Python,Python 3.x,Deep Copy,我有多个python类。其中一个类(比如class1)的对象中包含大量数据(在运行时不会更改)。另一个类(比如class2)有一个成员变量,它映射到class1的一个对象。假设class1和class2有其他可变和不可变的成员变量 现在我也想做一个类2对象的深度复制。它还将制作class2中class1对象的深度副本。但为了节省内存,我想避免这种情况。我该怎么做 class1类: 定义初始化(自): self.largeData=None self.mutableVar=None self.im

我有多个python类。其中一个类(比如class1)的对象中包含大量数据(在运行时不会更改)。另一个类(比如class2)有一个成员变量,它映射到class1的一个对象。假设class1和class2有其他可变和不可变的成员变量

现在我也想做一个类2对象的深度复制。它还将制作class2中class1对象的深度副本。但为了节省内存,我想避免这种情况。我该怎么做

class1类:
定义初始化(自):
self.largeData=None
self.mutableVar=None
self.immutableVar=None
第2类:
定义初始化(self,objc1:class1):
self.objc1=class1类型的objc1
self.mutableVar=None
self.immutableVar=None
c1_1=class1()
c1_2=class1()
c2_1=类别2(c1_1)
c2_1复制=复制。深度复制(c2_1)
#我希望c2_1副本引用与c2_1相同的objc1,
#但是可变变量和不可变变量不同
c2_2=class2(c1_2)#注意:不能使用静态变量
请帮我做这个…

提前感谢

使用
\uuu deepcopy\uuu
钩子方法自定义对象的深度复制方式

导入副本
类LargeDataContainer:
定义初始化(自):
self.data=“x”*800
课程内容:
def uuu init uuuu(自身、大数据:大数据容器):
self.large\u数据=large\u数据
self.x=[1,2,3]
def\uuuu deepcopy\uuuuu(自我,备忘录):
new_inst=type(self)。uuuu new_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__
新建_inst.large_data=self.large_data#只需分配
#对其他需要复制的属性进行冲洗并重复此操作:
new_inst.x=copy.deepcopy(self.x,memo)
返回新仪器
ldc=LargeDataContainer()
t1=物(ldc)
t2=复制。深度复制(t1)
断言t1不是t2
断言t1.large\u数据是t2.large\u数据
断言t1.x不是t2.x

class2
中实现自己的
copy
deepcopy
。请参见,您可以实现
\uuu deepcopy\uuu
,以避免复制该类的某些成员。