python3 浅拷贝 shallow copy 和 深拷贝 deep copy

本文通过实例对比了浅拷贝与深拷贝的区别,浅拷贝仅复制第一层对象,而深拷贝会递归复制所有层级的对象。通过修改原始数据观察不同拷贝方式的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅拷贝 shallow copy 和 深拷贝 deep copy

浅拷贝:

是指复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程

示例:

L = [3.1, 3.2]

L1 = [1, 2, L] #[1, 2, [3.1, 3.2]]

L2 = L1.copy() #[1, 2, [3.1, 3.2]]浅拷贝

L[0] = 3.14

L1 # [1, 2, [3.14, 3.2]]

L2 # [1, 2, [3.14, 3.2]] 为什么变为3.14?

# L1[2] 和 L2[2] 共同拥有 L绑定的对象

深拷贝:

示例:

import copy # 导放copy模块

L = [3.1, 3.2]

L1 = [1, 2, L] #[1, 2, [3.1, 3.2]]

L2 = copy.deepcopy(L1) # 深拷贝

L[0] = 3.14

L1 # [1, 2, [3.14, 3.2]]

L2 # [1, 2, [3.1, 3.2]] 此列表不受影响

注:

深拷贝通常只对可变对象进行深层复制,不可变对象通常不会被复制

 

理解:

import copy # 导入复制模块

L1 = [1, 2, [3.1, 3.2]]

L2 = L1 # 会发生什么?

L3 = L1.copy() # 会发生什么

L4 = copy.deepcopy(L1) # 会发生什么?

问题:

如何把L1 里的3.1 改为3.14

L1[2][0] = 3.14

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值