python浅拷贝和深拷贝
python浅拷贝和深拷贝
python中对对象直接赋值其实只是将其换了一个名字,想要对对象进行真正的复制要通过别的方法。
浅拷贝
浅拷贝利用copy()函数就可以实现,它会产生新的对象
l=[1,2,3,4]
l2=l.copy()
print(l,l2)
l.append(5)
print(l,l2)
#[1, 2, 3, 4] [1, 2, 3, 4]
#[1, 2, 3, 4, 5] [1, 2, 3, 4]
这样对原来的列表进行操作不会影响到新列表,如果直接采用赋值的方法则会影响到新的列表。
但是浅拷贝产生的新对象的子类还是指向原对象
l=[[1,2],[3,4]]
l2=l.copy()
print(l,l2)
l.append(5)
print(l,l2)
l[1].append(6)
print(l,l2)
#[[1, 2], [3, 4]] [[1, 2], [3, 4]]
#[[1, 2], [3, 4], 5] [[1, 2], [3, 4]]
#[[1, 2], [3, 4, 6], 5] [[1, 2], [3, 4, 6]]
对原对象元素的操作还会影响到新对象,所以想对子对象进行操作而不影响新对象就要用到深拷贝。
深拷贝
深拷贝需要用到copy模块中的deepcopy()函数
import copy
l=[[1,2],[3,4]]
l2=copy.deepcopy(l)
print(l,l2)
l.append(5)
print(l,l2)
l[1].append(6)
print(l,l2)
#[[1, 2], [3, 4]] [[1, 2], [3, 4]]
#[[1, 2], [3, 4], 5] [[1, 2], [3, 4]]
#[[1, 2], [3, 4, 6], 5] [[1, 2], [3, 4]]
深拷贝之后对原对象元素的操作就不会影响新对象
深拷贝与浅拷贝的区别便是,浅拷贝拷贝父对象,不会拷贝对象内部的子对象,而深拷贝完全拷贝了父对象和子对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)