zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python中copy,deepcopy,浅拷贝(“=”)和深拷贝(“copy.deepcopy()”)

Python 拷贝 copy
2023-09-14 09:06:09 时间

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的用法

Python---copy()、deepcopy()与赋值的区别_飘过的春风-CSDN博客_copy.deepcopy