python基础(三)python中的赋值、浅拷贝和深拷贝

(一)赋值
  赋值无论对于可变数据类型(字典和列表)还是不可变数据类型(数值型、字符串、元组)它的本质都是对元数据换了一个引用也就是在内存中并未开辟新的内存空间来存放数据,只是新增了引用(新增了名字)。
在这里插入图片描述
结论:对不可变数据类型a和可变数据类型c,赋值操作仅仅是增加了引用方式,并未开辟新的内存空间来独立两个对象。

(二)浅拷贝
  2.1 不可变数据类型
在这里插入图片描述结论:对于不可变数据类型浅拷贝也并未将两个对象独立开,即不会申请额外的内存。

  2.2 可变数据类型
原理:如图所示可变数据类型浅拷贝原理在这里插入图片描述
在这里插入图片描述
结论:浅拷贝可变数据类型,它是将拷贝对象用额外的内存存放即拷贝数据和原始数据是两个独立的对象。对数据中非复杂数据的修改两者是相互独立的;对复杂数据的修改是不独立的,因为它们共享这个子对象,只要它们其中一个进行更改操作,另一个也会跟着变化。

(三)深拷贝
  3.1 不可变数据类型
在这里插入图片描述
结论:深拷贝不可变数据类型,这两个对象也不是互相独立的,不会新开辟内存。

  3.2 可变数据类型
原理:如图所示可变数据类型深拷贝原理
在这里插入图片描述
在这里插入图片描述
结论:深拷贝可变数据类型,是将两个对象完全隔离开了,互相独立,互不影响。

(四)结论
1.赋值操作无论是对于可变数据类型还是不可变数据类型,都不会开辟新的内存空间,两个对象不是互相独立的,共享一个内存空间;只是多了个新的引用,内存计数器加1。
2.浅拷贝不可变数据类型与赋值操作一样并不独立共享内存;浅拷贝可变数据类型是实现将原始数据和拷贝数据独立开来(但仅能做到将数据中的简单对象独立开,复杂对象无法实现独立是共享内存,所以你会看到更改复杂子对象只要其中一个变,另一个也会跟着变)。那么,此时就需要深拷贝来实现原数据与拷贝数据的完全独立了。
3.深拷贝不可变数据类型也是共享内存、不独立;深拷贝可变数据类型是完全的实现原始数据对象和拷贝数据对象的独立,由不同内存存放,互不干扰。

参考:
  菜鸟教程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值