学习:python进阶 深浅拷贝
什么是拷贝?
原封不动地复制一份新的,在不同的内存地址上,修改旧的不会影响新的
【变量赋值不是拷贝】
list1=[1,2,[1,2]]
list2=list1
list1=[1,2,[1,2]]
list2=list1.copy()#浅拷贝,使用copy模块的copy方法,都是浅拷贝
执行浅拷贝操作,将在开辟一块新的内存空间,然后list2绑定到这块内存空间上。
新内存空间中有三个位置用来存放其三个元素的内存地址
新拷贝的列表的三个位置分别绑定就列表三个位置上的元素的内存地址
所以修改就列表中的子列表时,会影响新列表中的值,因为它们还同步一部分内存空间
【深拷贝】
from copy import deepcopy
list1=[1,2,[1,2]]
list2=deepcopy(list1)
深拷贝时,当元素是可变数据类型时,会重新开辟一块内存空间,存放这个元素对象的内存地址,且该元素内部的可变数据类型也会重新开辟内存空间,层层检查,层层拷贝
此时,新旧列表的子元素都不会共享内存地址,所有不会相互影响
【总结】
深浅拷贝讨论的拷贝对象是可变数据类型
深浅拷贝的区别在于:是否区分元素的可变还是不可变类型的判断
列表的切片也是浅拷贝,copy模块的copy.copy()函数是浅拷贝操作,和列表的内置方法copy()功能相同。
容器型数据类型的拷贝都存在深浅拷贝问题
深浅拷贝没有优缺点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示