python 深拷贝 浅拷贝

a = [1,2]

b = a

python中所有的赋值语句都是引用, 可以理解为浅拷贝。

---------------------------------------------------------------------------------------------------------------------------------------------------------

想实现内存中内容的复制需要使用深拷贝。

-------------------------------------------------------------------------------------------------------------------

浅拷贝是引用;深拷贝不受原来数据的影响,因为它重新开辟了一段新的内存,重新拷贝了数据,而不是引用。

在运行的结果中,d 复制了c 的指向(a b 的引用,相当于拷贝快捷方式),但是拷贝后增加的内容不识别。

如果元组中只有普通的数据,copy.copy()   copy.deepcopy()也是指向,因为元组是不可变类型。对于元组中有列表等可变类型,用cop还是引用,用deepcopy就是深拷贝。元组这样的不可变类型,deepcopy 认为复制另一份是不必要的,所以也是引用。总结来说,copy.copy 是浅拷贝,拷贝它的上一层,deepcopy 是递归拷贝。

如图: c = [a,b]

        d = copy.copy(c)   以后改变c,d 不变。 d = c[:] 与d = copy.copy(c)一样是浅拷贝。

dict中的value 值并不在字典里面存着,而存着它的引用。 运用hash 的方式,通过key ,找到value的值,所以只有一份value, copy.copy()   也是深拷贝。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在list传递参数的时候需要注意,是否需要改变原来列表的内容。python中,传递实参的时候,是赋值,传递的是引用浅拷贝 。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xieshangxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值