Shallow Copy(影子拷贝) VS Deep Copy(深拷贝)

本文介绍了浅拷贝(ShallowCopy)与深拷贝(DeepCopy)的概念及其实现方式。浅拷贝创建新对象并仅复制非静态字段,对于引用类型的字段则只复制引用而非对象本身。而深拷贝不仅复制对象,还复制所有引用的对象,确保完全独立。

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

Shallow Copy : 影子拷贝,msdn翻译为”浅表副本”
Deep Copy : 深拷贝, msdn翻译为”深层副本”


Shallow Copy与Deep Copy是用来在对象之间复制数据.

DotNET Framework用System.Object. MemberwiseClone方法创建Shallow Copy,它创建一个新对象,然后
将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,
则复制引用(reference)但不复制引用的对象(referred object);因此,原始对象及其复本引用
同一对象。

考虑引用对象 A 和 B 的被称为 X 的对象。对象 B 依次引用对象 C。X 的浅表副本创建一个新对象
X2,该对象也引用对象 A 和 B。相比而言,X 的深层副本创建一个新对象 X2,该对象引用新对象 A2
和 B2(分别为 A 和 B 的副本)。B2 又引用新对象 C2,C2 是 C 的副本。

在Python中,拷贝指的是创建一个新的对象,包含原始对象的所有内容。但是,深拷贝和浅拷贝会根据拷贝方式的不同,影响拷贝结果。 深拷贝Deep Copy)是指创建一个新的对象,包含原始对象的所有内容,甚至包括原始对象中引用的对象。也就是说,深拷贝会递归地复制所有对象,包括它们的内部对象。深拷贝的结果是两个完全独立的对象,修改一个对象不会影响另一个对象。 浅拷贝Shallow Copy)是指创建一个新的对象,包含原始对象的所有内容,但不会递归复制原始对象中引用的对象。也就是说,浅拷贝只复制对象的顶层内容,而不会对其内部对象进行复制。浅拷贝的结果是两个对象共享同一个内部对象,修改一个对象会影响另一个对象。 下面是一个例子,可以更好地说明深拷贝和浅拷贝的区别: ```python import copy # 定义一个列表 a = [1, 2, [3, 4]] # 浅拷贝 b = copy.copy(a) # 深拷贝 c = copy.deepcopy(a) # 修改a的第二个元素 a[1] = 5 # 修改a的第三个元素中的第一个元素 a[2][0] = 6 # 输出a、b、c的值 print(a) # [1, 5, [6, 4]] print(b) # [1, 2, [6, 4]] print(c) # [1, 2, [3, 4]] ``` 在上面的例子中,我们先定义了一个列表a,它包含了一个嵌套列表。我们使用copy.copy()copy.deepcopy()对a进行拷贝,并修改原始列表a的值。最后,我们输出了三个列表的值,可以看到,浅拷贝b的第三个元素的值也被修改了,而深拷贝c的值没有受到影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值