python中深复制和浅复制区别
在python中,对象赋值实际上是对象的的引用,当创建一个对象,然后把它赋值给另外一个变量的时候,python没有拷贝这个对象,而只是拷贝了这个对象的引用,多以就出现了浅复制,即复制后原对象改变后,复制出来的对象也会改变,要防止复制出来的对象改变,就要使用深复制
python复制三种方式
(1)直接赋值,传递对象的引用而已。原始列表改变,被赋值的对象也会做相同改变
1 list1 = [1,2,'a',[4,'ss']] 2 list2 = list1 3 print(list2) #result;[1, 2, 'a', [4, 'ss']] 4 print(list3) 5 list1.append(10) 6 print(list1,list2) #[1, 2, 'a', [4, 'ss'], 10] [1, 2, 'a', [4, 'ss'], 10]
(2)copy浅复制,没有拷贝子对象,所以原始数据改变,子对象也会发生变化
注:copy浅复制与list[:]效果一致
1 list1 = [1,2,'a',[4,'ss']]
2 import copy
3 list2 = copy.copy(list1)
4 print(list2) #[1, 2, 'a', [4, 'ss']]
5 list1.append('c')
6 print(list1,list2) #[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']]
7 list1[3].append(5)
8 print(list1,list2) #里面的子对象被改变了[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss', 5]]
(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
1 list1 = [1,2,'a',[4,'ss']] 2 import copy 3 list2 = copy.deepcopy(list1) 4 print(list2) #[1, 2, 'a', [4, 'ss']] 5 list1.append('c') 6 print(list1,list2) #list2始终没有变[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']] 7 list1[3].append(5) 8 print(list1,list2) #list2始终没有变[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss']]
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~