python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式。
其中浅拷贝由“=”完成。而深拷贝由copy模块中deepcopy()函数担任。
浅拷贝和深拷贝的区别是:
浅拷贝只是将原对象在内存中引用地址拷贝过来了。让新的对象指向这个地址。
而深拷贝是将这个对象的所有内容遍历拷贝过来了,相当于跟原来没关系了,所以如果你这时候修改原来对象的值跟他没关系了,不会随之更改。
我觉得深拷贝和浅拷贝的区别在于:
对于浅拷贝来说,如果有一方的内容发生了变化,另一方有可能也会发生变化
而深拷贝,无论哪一方发生什么样的变化,另一方都不会发生改变。
小例子:
深拷贝的一个例子(我们通过深拷贝创建了两个生成器“genA2B_ema”以及“genB2A_ema”):
self.genA2B = ResnetGenerator(input_nc=3, output_nc=3, ngf=self.args.ch, n_blocks=self.args.n_res, img_size=self.args.img_size, args=self.args).to(self.args.device)
self.genB2A = ResnetGenerator(input_nc=3, output_nc=3, ngf=self.args.ch, n_blocks=self.args.n_res, img_size=self.args.img_size, args=self.args).to(self.args.device)
self.genA2B_ema = copy.deepcopy(self.genA2B).eval().requires_grad_(False)
self.genB2A_ema = copy.deepcopy(self.genB2A).eval().requires_grad_(False)
具体的用法看以下链接:
Python中copy,deepcopy,=之深拷贝浅拷贝使用详解_涤生手记大数据-CSDN博客_python中deepcopy的用法