Python列表赋值拷贝,浅拷贝,深拷贝的区别
赋值拷贝又称引用拷贝
本质是创立一个指向被拷贝列表的引用,他们使用的是同一块内存区域,由于无论更改其中任何一个变量,我们被拷贝的变量也会跟着改变。简单的来说,赋值拷贝,无论把列表赋值给多少个变量,这些变量指向的都是同一个列表.如下面的例子,创立一个列表list1,将list1赋值给list3,而后给list3增加一个元素9,打印list3和list1,list3添加了一个元素9,list1也添加了一个元素9.打印他们的内存地址id,id是一样的.
“`
list1 = [1, 2, 3, 4]
list3 = list1
list3.append(9)
print(list3)
print(list1)
print(id(list1))
print(id(list3))
“`

浅拷贝
浅拷贝:浅拷贝是一维内存拷贝【不完全拷贝】,对于多维的列表,还会有内存公用的情况。
如下面的例子,创立一个二维列表list2,将list2拷贝给list4,先打印list4,与list2的内容一样;在list4
的一为列表下标为0的位置插入元素”b”,list2的二维列表末尾增加元素”a”,而后打印list4,与list2,
发现list2中的一为列表没有发生变化,在二维列表的末尾也增加了一个元素”a”,这就是多维列
表内存公用的情况.
“`
list2=[1,2,3,[7,8,9]]
list4=list2.copy()
print(list4)
list4.insert(0,”b”)
list4[-1].append(“a”)
print(list4)
print(list2)
“`

深拷贝
深拷贝:完全内存拷贝,将多维列表中的内容递归的复制一遍,重新存储到一块新的内存空间
因而在深拷贝不会出现内存公用的情况。深度拷贝需要导入copy板块,如下面例子,将list2拷贝给
list5,在list5中下标为0的位置插入”b”,二维列表末尾增加a,打印结果,只有list5发生了变化,list2 并
没有发生变化.这就是深度拷贝,完全拷贝.
“`
import copy
list2 = [1, 2, 3, [7, 8, 9]]
list5 = copy.deepcopy(list2)
list5[-1].append(“a”)
list5.insert(0, “b”)
print(list5)
print(list2)
“`

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Python列表赋值拷贝,浅拷贝,深拷贝的区别