python的深拷贝和浅拷贝

本文介绍了Python中的浅拷贝和深拷贝概念,浅拷贝使用copy.copy(),深拷贝使用copy.deepcopy()。浅拷贝只复制一层引用,当原对象的可变元素改变时,副本也会受影响。而深拷贝会递归复制所有层次,确保独立性。通过示例展示了修改原对象后,两种拷贝的不同行为。
摘要由CSDN通过智能技术生成

概念

  • 浅拷贝
    重新分配一块地址空间,创建一个对象,但是对象的元素是之间引用源对象的各个元素;
  • 深拷贝
    不仅重新开辟一块空间,且会使用递归的方式将原对象的各个元素复制到新对象中,复制完毕之后两者就没有任何关联;

定义

深拷贝 copy.deepcopy()
浅拷贝 copy.copy()

代码

import copy

#原始对象
list = [[2,5,6],1,2,3]

#list1表示浅拷贝、list2表示深拷贝
list1=copy.copy(list)
list2=copy.deepcopy(list)

#分别输出内容和地址
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))

print("---------------------------------------------------------")
print("修改数组中的元素")
list[2]=800
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))

print("---------------------------------------------------------")
print("修改数组中子数组的元素")
list[0][0]=100
print(list,id(list))
print(list1,id(list1))
print(list2,id(list2))

深拷贝不仅只拷贝表面
总结
深浅拷贝都是会开辟一片新的地址空间,浅拷贝复制完如果原对象是修改的元素是可变对象,那么浅拷贝的新对象也会随之变化,深拷贝由于使用递归的方式进行复制,因此他不会受影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值