Python关于浅拷贝与深拷贝

        在Python中,深拷贝和浅拷贝都可以用来复制对象,且复制对象时都会创建一个新的对象,但两者主要区别在于对于可变对象的处理方式不同。深拷贝将原始对象所有内容复制到新对象中,而浅拷贝在处理原始对象中的可变对象时,只复制可变对象的引用。

1、深拷贝:

        深拷贝copy.deepcopy()意味着创建一个新的对象,并将原始对象的所有内容都复制到新对象中。相当于按原样重新抄一份

 2、浅拷贝:

        浅拷贝将创建一个新的对象,并将原始对象中的所有元素复制到新对象中。如果原始对象有子对象,那么在浅拷贝中,子对象将不复制,而是引用到原始对象的子对象。相当于父层按原样重新抄一份,但子层不再是抄写而是引用地址,所以子层会随拷贝对象变化而变化,前提子层为引用类型。

  3、赋值:

       当原始对象为引用对象时,赋值操作时为抄写引用地址,原始对象变化时,赋值对象同步随之变化。

  4、示例:

a=[1,2,3,4,['a','b']]
print('#######改变前###########')
print('a=',a)
b=a;#赋值
print('赋值 b=',b)
c=copy.copy(a)#浅拷贝(copy()):拷贝父对象,不会拷贝对象内部的子对象
print('浅拷贝 c=',c)
d=copy.deepcopy(a)#深拷贝(deepcopy()):是copy模块中的方法,完全拷贝了子对象和父对象
print('深拷贝 d=',d)
print('#######改变后###########')
a.append(5)
print('改变父层后 a=',a)#改变父层
a[4].append('c')#改变子层
print('再次改变子层 a=',a)
print('赋值 b=',b)
print('浅拷贝 c=',c)
print('深拷贝 d=',d)

5、输出结果:

#######改变前###########

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

赋值 b= [1, 2, 3, 4, ['a', 'b']]

浅拷贝 c= [1, 2, 3, 4, ['a', 'b']]

深拷贝 d= [1, 2, 3, 4, ['a', 'b']]

#######改变后###########

改变父层后 a= [1, 2, 3, 4, ['a', 'b'], 5]

再次改变子层 a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]

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

浅拷贝 c= [1, 2, 3, 4, ['a', 'b', 'c']]

深拷贝 d= [1, 2, 3, 4, ['a', 'b']]

Process finished with exit code 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值