python 深浅拷贝

官方讲解链接:https://docs.python.org/zh-cn/3.12/library/copy.html,当你需要copy的变量的值中有可变对象时,又想要两个变量隔离,不因某个改变而篡改另一个变量的值时,就用深拷贝,否则就用浅拷贝,简单的变量直接赋值就行。

  • 浅拷贝
import copy
a = [999, list(range(2))]
b = copy.copy(a)
# 这里输出的值是一样的
print(a) # _>: [999, [0, 1]]
print(b) # _>: [999, [0, 1]]

# 对 a 的 可变部分 更改
a[1].append(3)
print(a) # _>: [999, [0, 1, 3]]
print(b) # _>: [999, [0, 1, 3]]
# b 因为 a 的改变而改变
  • 深拷贝
import copy
a = [999, list(range(2))]
b = copy.deepcopy(a)
# 这里输出的值是一样的
print(a) # _>: [999, [0, 1]]
print(b) # _>: [999, [0, 1]]

# 对 a  的可变 部分更改之后
a[1].append(3)
print(a) # _>: [999, [0, 1, 3]]
print(b) # _>: [999, [0, 1]]
# b 没有因为 a 的改变而改变

深浅拷贝的定义
深浅拷贝是关于对象拷贝的两种不同方式,主要区别在于它们处理对象内部包含的其他对象(如列表、字典等)的方式。
浅拷贝
浅拷贝创建一个新的对象,这个对象的内容是原对象中子对象的引用。因此,如果原对象中的子对象是可变的(如列表、字典),修改这些子对象会影响到拷贝后的对象。
深拷贝
深拷贝创建一个新的对象,并且递归地复制原对象中的所有子对象。因此,深拷贝后的对象与原对象完全独立,修改原对象中的子对象不会影响到拷贝后的对象。
本质区别 >> 深浅拷贝最本质的区别在于它们处理嵌套对象的方式:

  • 浅拷贝:只复制最外层对象,内部嵌套对象只是引用复制,因此修改嵌套对象会影响到原对象和拷贝对象。
  • 深拷贝:不仅复制最外层对象,还递归地复制所有嵌套对象,因此原对象和拷贝对象完全独立,互不影响。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值