python中的深拷贝和浅拷贝

1、可变对象、不可变对象

可变对象:一个对象在不改变其所指向的地址前提下,可以修改其所执行的地址中的值,修改值,地址不变
不可变对象:一个对象所指向的地址上的值是不能修改的,如果修改,那么新修改的值会存放在另一个地址上
可变对象:list 、dict、 set
不可变对象:tuple、 string、 int、 float、 bool

可变对象

不可变对象

2、赋值 浅拷贝 深拷贝

赋值:赋值实际上是对象引用的传递,当创建一个对象的时候,再赋值给另外一个变量的时候,并不是将该对象赋值给另一个变量。而是把这个变量在地址空间的id地址值传递给另一个变量,简单的说就是拷贝了这个对象的引用。(修改一个的值另一个也会随之改变,因为两个变量指向同一个地址)
赋值

浅拷贝:浅拷贝是对一个对象父级(外层)的拷贝,并不会拷贝子级(内部)。使用浅拷贝的时候,分为两种情况。

浅拷贝第一种情况,如果最外层的数据类型是可变的,比如说列表,字典等,浅拷贝会开启新的地址空间去存放。但其内层还是对其原地址的引用(即使内层被修改了)
在这里插入图片描述
在这里插入图片描述
浅拷贝第二种情况,如果最外层的数据类型是不可变的,比如元组,字符串等,浅拷贝对象的时候,还是引用对象的地址空间。
在这里插入图片描述

深拷贝:深拷贝对一个对象是所有层次的拷贝(递归),内部和外部都会被拷贝过来

深拷贝第一种,最外层数据类型可变,内层数据也可变。这个时候,内部和外部的都会拷贝过来。
在这里插入图片描述
深拷贝第二种,最外层数据类型可变,内层数据不可变。这个时候,外部拷贝过来,内部引用原地址。
在这里插入图片描述
深拷贝第三种,外层数据类型不可变,内层是可变数据类型,会新开辟地址空间存放。(内层影响到外层了)
在这里插入图片描述
深拷贝第四种, 内外层都不可变,才会如同浅拷贝一样,是对地址的引用。
在这里插入图片描述

意义

1、浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层
2、减少内存的使用
3、在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值