浅拷贝与深拷贝

浅拷贝和深拷贝是编程中对象复制的两种方式,它们的区别在于复制的深度以及如何处理对象内部的嵌套结构。

浅拷贝(Shallow Copy)

浅拷贝仅仅复制对象的第一层内容,对于对象中的引用(如列表、字典、嵌套对象等)只是复制它们的引用,而不是复制它们指向的实际数据。浅拷贝后,原对象和新对象共享这些引用。

实现方式

  • 在 Python 中,可以使用 copy 模块的 copy() 函数进行浅拷贝。
  • 使用对象的构造方法(如 list()dict() 等)实现浅拷贝。

特点

  1. 只复制对象的第一层数据结构。
  2. 如果对象中包含的子对象发生变化,浅拷贝的对象也会反映出这些变换。

示例

import copy

# 原始对象
original = [1, 2, [3, 4]]

# 浅拷贝
shallow_copy = copy.copy(orginal)

# 修改子对象
shallow_copy[2][0] = 99
shallow_copy[1] = 10

print("Original:", original) # Original: [1, 2, [99, 4]]
print("Shallow Copy:", shallow_copy) # Shallow Copy: [1, 10, [99, 4]]

深拷贝(Deep Copy)

深拷贝会递归地复制整个对象,包括对象内部的所有嵌套对象。拷贝后的对象与原对象完全独立,修改任意一个不会影响另一个。

实现方式

  • 在 Python 中,可以使用 copy 模块的 deepcopy() 函数进行深拷贝。

特点

  1. 复制整个对象,包括嵌套的子对象
  2. 拷贝后的对象和原对象完全独立。

示例

import copy

# 原始对象
original = [1, 2, [3, 4]]

# 深拷贝
shallow_copy = copy.deepcopy(orginal)

# 修改子对象
shallow_copy[2][0] = 99
shallow_copy[1] = 10

print("Original:", original) # Original: [1, 2, [3, 4]]
print("Shallow Copy:", shallow_copy) # Shallow Copy: [1, 10, [99, 4]]

总结

特性浅拷贝深拷贝
拷贝范围只拷贝第一层数据拷贝整个对象及其嵌套子对象
独立性部分独立(共享子对象引用)完全独立
性能通常比浅拷贝快通常比浅拷贝慢
使用场景对象嵌套层次浅或无需完全独立时需要完全独立的深度嵌套结构时

注意事项

  1. 对于不可变对象(如字符串、元组),深拷贝和浅拷贝是相同的,因为不可变对象不会被改变。
  2. 深拷贝需要更多的内存和时间,尤其是嵌套层次复杂的情况下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值