Python 浅拷贝与深拷贝

Python赋值语句不复制对象,只指向目标对象。为避免值改变带来的影响,可以使用copy模块进行浅拷贝和深拷贝。浅拷贝创建新对象,但元素是原对象子对象的引用,改变子对象会影响原对象。深拷贝则创建完全独立的新对象,即使原对象改变也不会受影响。深拷贝需注意递归拷贝可能导致无限循环,可通过定义特殊方法避免。

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

python 赋值语句不会复制对象,只会指向目标对象。当一个值改变时,另一个值会跟着改变。copy 模块提供了浅拷贝和深拷贝,可以解决这一问题。

import copy

浅拷贝

浅拷贝开辟一个新的内存空间,创建一个新的对象,其中的每个元素都是原对象中子对象的引用。

x = [[1, 2, 3], [10, 20, 30]]
y = copy.copy(x)

如果仅对 y 增加元素,x 不会改变。

y.append(100)
# x [[1, 2, 3], [10, 20, 30]]
# y [[1, 2, 3], [10, 20, 30], 100]

如果改变 y 中第一个列表,则 x 也会改变。

y[0].append(100)
# x [[1, 2, 3, 100], [10, 20, 30]]
# y [[1, 2, 3, 100], [10, 20, 30]]

深拷贝

深拷贝构造一个新的对象,并把原对象中的元素拷贝插入其中。

copy.deepcopy(x[, memo])

新对象与原对象没有任何关联。

如果深度拷贝中,被拷贝的对象如果存在指向自身的引用,则会陷入无限循环。memo 参数可以防止递归拷贝。

可以通过定义类的__copy__()__deepcopy__()方法定义实现。

更详细的内容参考copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值