Python学习笔记1-深浅拷贝

在 Python 中,深拷贝(deep copy)和浅拷贝(shallow copy)是两种不同的复制对象的方法,它们在处理可变对象(如列表、字典等)时有着显著的区别。

1. 浅拷贝 (Shallow Copy)

浅拷贝是创建一个新对象,但这个新对象中的元素是原对象中元素的引用。换句话说,浅拷贝只复制了对象本身及其第一层内容(即最外层的对象),而内部的可变对象依然是与原对象共享的。

浅拷贝的方式
  • 使用 copy 模块中的 copy() 函数
  • 使用对象的 copy() 方法(如列表、字典等)
  • 使用切片操作 [:] (对列表有效)
import copy

# 浅拷贝示例
original_list = [1, 2, [3, 4]]
shallow_copied_list = copy.copy(original_list)

# 修改内部可变对象(原列表和浅拷贝共享的部分)
shallow_copied_list[2][0] = 99

print(original_list)       # 输出: [1, 2, [99, 4]]
print(shallow_copied_list) # 输出: [1, 2, [99, 4]]

浅拷贝的特征:

  • 原对象与浅拷贝对象共享内部的可变对象。
  • 修改共享的可变对象时,会影响原对象和浅拷贝对象。
  • 浅拷贝适合在不包含复杂嵌套结构的对象复制中使用。

2. 深拷贝 (Deep Copy)

深拷贝是创建一个新对象,并递归地复制所有子对象(即整个对象树)。因此,新对象与原对象完全独立,任何一方的修改都不会影响另一方。

深拷贝的方式
  • 使用 copy 模块中的 deepcopy() 函数
import copy

# 深拷贝示例
original_list = [1, 2, [3, 4]]
deep_copied_list = copy.deepcopy(original_list)

# 修改内部可变对象(原列表和深拷贝不共享的部分)
deep_copied_list[2][0] = 99

print(original_list)       # 输出: [1, 2, [3, 4]]
print(deep_copied_list)    # 输出: [1, 2, [99, 4]]

深拷贝的特征:

  • 原对象与深拷贝对象完全独立,不共享内部可变对象。
  • 修改深拷贝对象中的任何元素,不会影响原对象,反之亦然。
  • 深拷贝适合用于复制复杂嵌套结构的对象。

3. 何时使用深拷贝与浅拷贝

  • 浅拷贝:当你需要复制一个对象,并且这个对象内部没有嵌套其他可变对象(如列表或字典),或即使有也不打算修改它们时,使用浅拷贝即可。
  • 深拷贝:当你需要复制一个包含复杂嵌套结构的对象,并且希望新对象与原对象完全独立时,应该使用深拷贝。

总结

  • 浅拷贝:只复制对象本身及其第一层内容,内部嵌套的对象是共享的。
  • 深拷贝:递归复制整个对象树,完全独立于原对象。

通过合理选择浅拷贝和深拷贝,可以在不同场景下高效地管理内存和数据的独立性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值