Python深拷贝和浅拷贝解读
1|0前言
首先在之前的基础学习中并没有接触到深拷贝和浅拷贝的知识,但是随着我的不断深入学习,发现了很多的更细的知识点需要补充。
在了解深拷贝和浅拷贝之前有必要来提及一下对象的比较,也就是'=='和'is'的判断。
2|0对比
is和==做为判断条件,我们经常使用,比如
在之前未了解深拷贝和浅拷贝时,对于我的理解就是判断2个对象的值相等。但是实际内部的判断并非如此。
因为它们的值是相等的,所以判断均为True,但是这并不能说明所有的现象,看下面例子
这里的is判断出现了F,是不是和之前的结果不一致呢?事实上,出于对性能优化的考虑,Python 内部会对 -5 到 256 的整型维持一个数组,起到一个缓存的作用。这样,每次你试图创建一个 -5 到 256 范围内的整型数字时,Python 都会从这个数组中返回相对应的引用,而不是重新开辟一块新的内存空间,但是如果超过这个区间,python就会重新分配新的内存地址。
看到这里我们应该了解了is和 == 的区别,==是像我之前理解的一致,判断值是否相等。is则是判断ID。
3|0浅拷贝
copy.copy(x)
c = a: 赋值引用,a 和 c 都指向同一个对象,内存地址相同。
个人理解:只要a的值发生变化,c一定跟着a发生变化。
b = copy.copy(a): 浅拷贝, a 和 b 是一个独立的对象(内存地址不同),但他们的子对象还是指向统一对象(是引用)。
个人理解:如果a的某个子对象是可变对象那么这个子对象发生变化时,b也会发跟着发生变化,如果a的某个子对象是不可变对象,那么这个不可变子对象发生改变不会影响到b
4|0深拷贝
copy.deepcopy(x)
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
个人理解:无论a的值怎么变化始终不会影响到b
__EOF__

本文链接:https://www.cnblogs.com/harry66/p/14472779.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Harry_666,转载请注明原文链接:https://www.cnblogs.com/harry66/p/14472779.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?