Python copy模块
参考:https://docs.python.org/zh-cn/3/library/copy.html
介绍
Python copy模块包括copy()和deepcopy()两函数。
copy.copy(x): 返回 x 的浅层(shallow)复制。
copy.deepcopy(x[, memo]): 返回 x 的深层复制。
代码示例
import copy
#列表
a = [1,2,[5,4]]
a1 = copy.copy(a)
a2 = copy.deepcopy(a)
print(a1) #[1, 2, [5, 4]]
print(a2) #[1, 2, [5, 4]]
#改变列表最外层的元素不会影响shallow copy和deep copy的结果
a[0] = "YY"
print(a) #['YY', 2, [5, 4]]
print(a1) #[1, 2, [5, 4]]
print(a2) #[1, 2, [5, 4]]
#改变第二层列表的元素不会影响deep copy的结果,shallow copy的结果会受到影响
a[2][0] = "XX"
print(a) #['YY', 2, ['XX', 4]]
print(a1) #[1, 2, ['XX', 4]]
print(a2) #[1, 2, [5, 4]]
#字典
b = {"name":"ZZ", "pets": ["tantan","lele"]}
b1 = copy.copy(b)
b2 = copy.deepcopy(b)
print(b1) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
print(b2) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
#改变字典最外层的键值对不会影响shallow copy和deep copy的结果
b["age"] = 10 #在字典最外层增加键值对
print(b) #{'name': 'ZZ', 'pets': ['tantan', 'lele'], 'age': 10}
print(b1) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
print(b2) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
del b["name"] #删除字典最外层删除键值对,del b["pets"]
print(b) #{'pets': ['tantan', 'lele'], 'age': 10}
print(b1) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
print(b2) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
#改变字典中列表的元素不会影响deep copy的结果,shallow copy的结果会受到影响
b["pets"].append("huahua")
print(b) #{'pets': ['tantan', 'lele', 'huahua'], 'age': 10}
print(b1) #{'name': 'ZZ', 'pets': ['tantan', 'lele', 'huahua']}
print(b2) #{'name': 'ZZ', 'pets': ['tantan', 'lele']}
总结
deep copy对象是独立于原object存在的,也就是说原object的任何改变都不会引起deepcopy()对象的改变;
shallow copy对象不是完全独立于原object,原object内二级对象(比如字典或列表内的字典或列表)的改变会引起shallow copy对象改变。
分类:
python库学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理