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对象改变。

posted @   yayagogogo  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示