python深复制与浅复制区别

1. copy.copy() 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

2. copy.deepcopy() 深拷贝 拷贝对象及其子对象

由于在python中对象之间赋值只是引用的传递,即多个对象指向同一个地址,如

a=[1,2,3]

b=a

此时a与b是指向同一个内存地址的,即存储[1,2,3]的内存地址;

那么如果对b进行改动,则势必会将a的值一并修改,那么此时就必须使用复制来copy一个新的对象,如

a=[1,2,3]

b=copy.copy(a)或者b=copy.deepcopy(a),此时,a与b指向的是不同的内存地址,修改b不会影响到a.

然而深复制和浅复制有什么区别呢?

如果仅仅是一级列表深复制和浅复制并无区别,然后对于list的嵌套则不同,如下:

a=[1,2,3,4,['a','b','c'],5]对于这样一个序列,使用深拷贝和浅拷贝来分别验证;

b=copy.copy(a)

c=copy.deepcopy(a)

结果为:

b=[1,2,3,4,[a,b,c],5]

c=[1,2,3,4,[a,b,c],5]

看起来好像并没有不同,然而我们修改a[4]的内容如使用a[4].append('d'),同时修改a的内容如使用a.append(6)

此时结果为:

a=[1,2,3,4,['a','b','c','d'],5,6]

b=[1,2,3,4,['a','b','c','d'],5]

c=[1,2,3,4,['a','b','c'],5]

可以看出来b,c对于a.append(6)这个操作不感冒,因为它们指向的地址不同,故不会影响;

然而a[4].append('d')则会影响到b,而不会影响到c;

1.原因在于深拷贝会将对象的父对象和子对象一起拷贝,是完整的拷贝;

2.而浅拷贝只是拷贝了父对象,对于子对象,b[4]和a[4]依然指向同一个地址,是引用,而非拷贝,故会被影响;





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值