编程学习网 > 编程语言 > Python > 从入门到精通:彻底搞懂 Python 的深拷贝和浅拷贝!
2024
08-01

从入门到精通:彻底搞懂 Python 的深拷贝和浅拷贝!


在Python编程中,理解深拷贝(deep copy)和浅拷贝(shallow copy)的区别至关重要。它们是处理对象复制时的两个重要概念。

什么是拷贝?
拷贝,就是复制对象。简单来说,你有一个对象A,想要创建一个新的对象B,使得B与A有相同的内容。这就需要用到拷贝。

浅拷贝:蜻蜓点水般的复制
浅拷贝是指创建一个新的对象,但并不复制对象内的子对象。因此,新对象与原对象共享子对象的引用。可以用“蜻蜓点水”来形象化浅拷贝的操作。

示例代码:
import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 浅拷贝
shallow_copied_list = copy.copy(original_list)

# 修改原始列表中的子对象
original_list[2][0] = 99

print("原始列表:", original_list)
print("浅拷贝列表:", shallow_copied_list)
输出:

原始列表: [1, 2, [99, 4]]
浅拷贝列表: [1, 2, [99, 4]]
可以看到,修改原始列表的子对象后,浅拷贝列表中的相应部分也发生了变化。这是因为浅拷贝只复制了对象的引用,没有复制对象本身。

深拷贝:深入骨髓的复制
深拷贝是指创建一个新的对象,并且递归地复制对象内的所有子对象。可以用“深入骨髓”来形象化深拷贝的操作。

示例代码:
import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 深拷贝
deep_copied_list = copy.deepcopy(original_list)

# 修改原始列表中的子对象
original_list[2][0] = 99

print("原始列表:", original_list)
print("深拷贝列表:", deep_copied_list)
输出:

原始列表: [1, 2, [99, 4]]
深拷贝列表: [1, 2, [3, 4]]
可以看到,修改原始列表的子对象后,深拷贝列表保持不变。这是因为深拷贝创建了完全独立的副本,两个列表互不影响。

什么时候用浅拷贝,什么时候用深拷贝?
• 浅拷贝:当你处理的对象较为简单,或不涉及嵌套的子对象时,浅拷贝是合适的选择。

• 深拷贝:当你处理的对象较为复杂,包含嵌套的子对象,并且希望复制后对象互不影响时,深拷贝是更安全的选择。

使用内置方法进行拷贝
在实际编程中,除了使用copy模块,Python的一些内置方法也能实现拷贝:

• 切片操作(适用于列表):

original_list = [1, 2, 3, 4]
copied_list = original_list[:]
• 字典的copy方法

original_dict = {'a': 1, 'b': 2}
copied_dict = original_dict.copy()
不过,以上方法仅适用于浅拷贝,如果需要深拷贝,还是需要依赖copy.deepcopy。

理解深拷贝和浅拷贝是Python编程中的一项基本技能。浅拷贝是“蜻蜓点水”的复制,而深拷贝是“深入骨髓”的复制。选择合适的拷贝方式,可以帮助你编写更高效和安全的代码。

以上就是从入门到精通:彻底搞懂 Python 的深拷贝和浅拷贝!的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取