Python深浅copy的区别

一、Python对象

在Python中一切皆对象。Python中构造的任何数据类型都是一个对象,不管是数字、字符串、字典等常见的数据结构,还是函数,甚至我们导入的模块等,Python都会把它当做是一个对象来处理。

Python对象拥有三个属性:

  • 身份
  • 类型

对象在内存中的地址表明他的身份,通过id方法查看

类型表示对象可以存储什么类型的数据

值就是具体变量的值

二、Python深拷贝和浅拷贝概念理解

(1)浅拷贝

只拷贝原数据的首地址,然后通过原数据的首地址去获取内容

(2)深拷贝

开辟一块新内存,将被拷贝内容全部拷贝过来。

(3)优缺点对比

深拷贝:拷贝成都高,将原数据复制到新的内存空间中。改变拷贝后的内容不影响原数据内容。但是深拷贝耗时长,且占用内存空间。

浅拷贝:拷贝程度低,只复制原数据的地址,其实是将副本的地址指向原数据地址。修改副本内容,是通过当前地址指向原数据地址去修改,所以修改副本内容会影响原数据内容。浅拷贝耗时短,占用内存空间少。

三、具体实例理解

首先理解Python对象的存储。正如前面所说,Python开辟一个地址存储一个对象,主要有三个属性,分别是身份、类型、值。

对于不同的数据类型,存储策略有所不同

  • 整数

对于aa=1234,这一Python语句进行存储,会开辟一块内存存储

  • 字符串

对于单个字符串,会开辟一块内存进行存储,如aa='1';对于多字符,如aa='1234', 会开辟两级内存进行存储

对于列表,当列表中元素为空时,只会开辟一个内存进行存储,当列表中元素大于等于1时,就会开辟多级内存进行存储

知道存储的机制后,结合深copy和浅copy 的概念,就会发现

浅copy只会把第一级内存进行copy,如果原数据第一级所存储的ID发生变化,那么不会影响浅copy的值,如果元数据第一级之后的内存发生变化,那么就会影响的浅copy的值

而深copy是,将对象的每一级存储进行了复制,所以原数据的无论怎么变化都不会影响深copy 的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值