Python 标准库:copy——对象拷贝操作


模块介绍

copy 是 Python 标准库中的一个模块,提供了用于对象拷贝的工具,主要有两种拷贝方式:浅拷贝(shallow copy)和 深拷贝(deep copy)。这两种拷贝方式的主要区别在于是否递归地拷贝嵌套对象(例如列表中的列表)。

使用场景

  • 浅拷贝:适用于当你不需要递归拷贝所有嵌套对象,仅仅需要复制最外层对象的情况。例如,你只需要复制一个列表本身,而不关心列表中的嵌套列表是否需要被单独拷贝。
  • 深拷贝:适用于你需要完全独立的副本的情况,即原始对象及其所有嵌套对象的副本都不共享任何引用。

主要函数

函数描述
copy()创建并返回对象的浅拷贝(仅复制对象的第一层,嵌套对象仍然引用原对象)。
deepcopy()创建并返回对象的深拷贝(递归地复制所有层级的对象,完全独立于原对象)。

- copy()

浅拷贝创建一个新的对象,但不会递归地拷贝嵌套对象,而是直接引用原对象中的子对象。

import copy

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

# 浅拷贝原始对象
shallow_copy = copy.copy(original)

# 修改嵌套列表的元素
shallow_copy[2][0] = 99

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

- deepcopy()

深拷贝递归地拷贝对象及其所有嵌套对象,这意味着原始对象和拷贝对象之间的所有引用关系都会被切断,修改拷贝对象中的元素不会影响原始对象。

import copy

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

# 深拷贝原始对象
deep_copy = copy.deepcopy(original)

print("Original:", original)  # 输出: Original: [1, 2, [3, 4]]
print("Deep Copy:", deep_copy)  # 输出: Deep Copy: [1, 2, [99, 4]]

# 修改嵌套列表的元素
deep_copy[2][0] = 99
print("Change Copy:", deep_copy)  # 输出: Change Copy: [1, 2, [99, 4]]

深浅拷贝比较

特性浅拷贝:copy()深拷贝:deepcopy()
拷贝层次只复制对象本身,嵌套对象仍然引用原对象中的嵌套对象。递归地复制对象及其所有嵌套对象,创建一个完全独立的副本。
修改影响修改嵌套对象会影响原对象和拷贝对象。修改任何嵌套对象或原始对象不会影响到另一个对象。
性能浅拷贝速度较快,因为它只复制对象的第一层。深拷贝比较慢,因为它需要递归地复制所有层级的对象。

注意事项

  • copy.copy() 和 copy.deepcopy() 都不会对不可变类型(如整数、字符串、元组)进行复制,因为这些对象是不可变的,它们本身就不能被修改。因此,对于这些类型的对象,浅拷贝和深拷贝的效果是一样的。

总结

  • 浅拷贝 copy():只复制对象的第一层,嵌套对象仍然指向原对象的引用。
  • 深拷贝 deepcopy():递归地复制对象及其嵌套对象,确保原始对象和拷贝对象完全独立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值