python关于内存空间-深拷贝和浅拷贝的理解

本文探讨Python中的深拷贝和浅拷贝概念,解释它们的区别。通过实例分析,展示了深拷贝如何创建完全独立的对象副本,而浅拷贝仅复制对象的引用。强调了深拷贝在处理可变对象时的重要性,以及在何时使用深拷贝或浅拷贝的决策考虑。
摘要由CSDN通过智能技术生成

Python中关于内存空间的理解

我们先看看
基本类型变量在内存中的存储方式

// C语言
int a,b;
a = 1;
b = a;
a = 99;
printf("b is %d",b);
// python 
a = 1;
b = a;
a = 99;
print("b is {b}");

下图是整个过程
变量在内存中的行为
我们再来说说

深拷贝和浅拷贝的理解

先要了解python中变量的基本类型
number string boolen tuple list dict set,

将其分为可变和不可变类型

  • 可变 => 变量在内存中存储后不可以再改变,即id地址上的数据无法更改,只能是重新赋值。
  • 不可变 => 反之。

可变类型有: list dict set
不可变类型有: string number tuple

举例说明

对象a =[1,2,3,4,’b’]
对象c =copy.copy(a)
下图是对象在内存中的模型
在这里插入图片描述
深浅的初步了解?️

浅拷贝:对父对象的拷贝 即把a对象拷贝另外一个地址空间,但是里>面的资源地址空间没有变。

深拷贝:对对象的资源的拷贝。

深浅拷贝的深度理解?️

理解一

浅拷贝
1、对于 不可 变类型 Number String Tuple,浅复制仅仅是地址指向,不会开辟新空间。
2、对于 可 变类型 List、Dictionary、Set,浅复制会开辟新的空间地址(仅仅是最顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝
3、浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象的;改变原始对象中为不可变类型的元素的值,只有原始类型受影响。
深拷贝
1、浅拷贝,除了顶层拷贝,还对子元素也进行了拷贝(本质上递归浅拷贝)作拷贝对象对原始对象的也是同理)
2.经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了


理解二

浅拷贝顾名思义就是拷贝的比较浅我们可以把赋值认为是新建了一个对象的引用,把原来被对象内存空间的数据指向新的变量,这时同一块内存空间指向两个变量。浅拷贝与赋值不同,既然是拷贝,那么就是要开辟一块新的内存空间,复制的是原来被拷贝对象内多个元素对象的引用,有几个元素对象就赋值几个元素对象的引用。因此,被浅拷贝对象内的元素改变,会引起浅拷贝对象内元素的改变;被拷贝对象添加元素,拷贝对象不再添加元素(因为没有一个新的引用);被拷贝对象删除元素,拷贝对象也删除元素(元素都已经删了,虽然引用存在,但是并没有什么卵用)。

深拷贝其实与浅拷贝有本质的区别

深拷贝不会复制任何的引用,对象内的所有元素,子元素,孙子元素,重孙元素,曾孙元素的数据都是由复制而来。它的实现原理就是递归,只要任意元素内仍然有子元素,就会复制子元素的数据放到新的内存地址。既然这样,在使用深拷贝后,被拷贝对象的改变,不会引起拷贝对象的任何改变。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值