Python中深拷贝和浅层拷贝区别

在Python中,浅拷贝和深拷贝是两种不同的对象复制方式,它们的主要区别在于对嵌套对象的处理以及与原始对象的关系。

  1. 对嵌套对象的处理:浅拷贝只复制了最外层的对象,而内部的元素实际上是原对象的引用。这意味着如果原始对象包含对其他对象的引用(例如列表中的列表),则拷贝后的新对象会共享这些内部对象。相比之下,深拷贝则会递归地复制所有层级的对象,包括嵌套的对象,确保新对象中的每一个元素都是原始对象的一个独立副本。
  2. 与原始对象的关系:由于浅拷贝中的内部对象仍然是原始对象的引用,所以原始对象的改变会影响到浅拷贝对象。相反,深拷贝创建了一个完全独立的新对象,它与原始对象没有任何关联,因此原始对象的任何变化都不会影响深拷贝对象。

总的来说,浅拷贝适用于那些不需要复制嵌套结构或者希望保持内部对象引用一致的情况。而深拷贝则适用于需要完全隔离原始对象和新对象的场景,特别是在处理复杂的数据结构或者不希望原始对象的变化影响到新对象时。

下面是一段Python代码来演示浅拷贝和深拷贝的区别:

import copy

# 创建一个包含嵌套列表的原始对象
original_list = [1, 2, [3, 4]]

# 创建浅拷贝对象
shallow_copy = copy.copy(original_list)

# 创建深拷贝对象
deep_copy = copy.deepcopy(original_list)

# 修改原始对象的内部元素
original_list[2][0] = 99

# 打印原始对象、浅拷贝对象和深拷贝对象
print("Original List:", original_list)
print("Shallow Copy:", shallow_copy)
print("Deep Copy:", deep_copy)

下面是运行结果

Original List: [1, 2, [99, 4]]
Shallow Copy: [1, 2, [99, 4]]
Deep Copy: [1, 2, [3, 4]]

那么有人要问了,赋值操作是什么呢,赋值操作在Python中是更浅的浅拷贝,直接把引用返回给对象,改变原对象的时候,被赋值的对象也会被改变。所以拷贝程度:深拷贝> 浅拷贝 > 赋值。

import copy

# 创建一个包含嵌套列表的原始对象
original_list = [1, 2, [3, 4]]

# 创建浅拷贝对象
shallow_copy = original_list
# 创建深拷贝对象
deep_copy = copy.deepcopy(original_list)

# 修改原始对象的内部元素

original_list[0] = 77
# 打印原始对象、浅拷贝对象和深拷贝对象
print("Original List:", original_list)
print("Shallow Copy:", shallow_copy)
print("Deep Copy:", deep_copy)

下面是运行结果

Original List: [77, 2, [3, 4]]
Shallow Copy: [77, 2, [3, 4]]
Deep Copy: [1, 2, [3, 4]]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值