浅副本是指创建一个新对象,但其内容是原对象中元素的引用。也就是说,浅副本只复制对象本身,而不复制对象引用的其他对象。
深副本会递归地复制对象及其所有子对象,创建一个完全独立的副本。修改深副本不会影响原对象。
# 使用copy模块
import copy
new_list = copy.copy(original_list)
# 列表切片
new_list = original_list[:]
# 字典copy方法
new_dict = original_dict.copy()
import copy
new_list = copy.deepcopy(original_list)
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 简单数据结构 | 浅副本 | 效率高,满足需求 |
| 多层嵌套结构 | 深副本 | 避免意外修改 |
| 不可变对象 | 浅副本 | 无需深复制 |
| 需要完全独立副本 | 深副本 | 确保数据隔离 |
当数据结构包含多层嵌套的可变对象(如列表中的列表、字典中的字典),且需要确保副本完全独立时,必须使用深副本。
直接赋值(=)只是创建了一个新引用指向原对象,而浅副本会创建一个新对象,但只复制最外层结构。
深副本需要递归复制所有对象,对于大型复杂数据结构,可能会消耗较多内存和时间,应谨慎使用。