目录

* 一、引言 <https://www.cnblogs.com/nickchen121/p/11069994.html#一引言>
* 二、拷贝 <https://www.cnblogs.com/nickchen121/p/11069994.html#二拷贝>
* 三、浅拷贝 <https://www.cnblogs.com/nickchen121/p/11069994.html#三浅拷贝>
* 四、深拷贝 <https://www.cnblogs.com/nickchen121/p/11069994.html#四深拷贝>
一、引言

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

针对该列表l1=['a','b','c',['d','e','f']]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝

注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的

二、拷贝

如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。
l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = l1 l1.append('g') print(l1) ['a',
'b', 'c', ['d', 'e', 'f'], 'g'] print(l2) ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
三、浅拷贝

如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。
import copy l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = copy.copy(l1)
l1.append('g') print(l1) ['a', 'b', 'c', ['d', 'e', 'f'], 'g'] print(l2) ['a',
'b', 'c', ['d', 'e', 'f']] l1[3].append('g') print(l1) ['a', 'b', 'c', ['d',
'e', 'f', 'g'], 'g'] print(l2) ['a', 'b', 'c', ['d', 'e', 'f', 'g']]
四、深拷贝


如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。
import copy l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = copy.deepcopy(l1)
l1.append('g') print(l1) ['a', 'b', 'c', ['d', 'e', 'f'], 'g'] print(l2) ['a',
'b', 'c', ['d', 'e', 'f']] l1[3].append('g') print(l1) ['a', 'b', 'c', ['d',
'e', 'f', 'g'], 'g'] print(l2) ['a', 'b', 'c', ['d', 'e', 'f']]

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信