python--浅拷贝、copy浅拷贝、深拷贝的理解
在python中,对象赋值实际上是对象的引用,当创建了一个对象,然后把它赋值给另外一个变量的时候,并没有拷贝这个对象,只是单纯的引用,变量地址其实都是一样的。
1、浅拷贝
直接赋值默认是浅拷贝,指向地址相同,只要变量一个修改另外一个也会修改。
import copy
alist=[1, 2, 3, ['a', 'b']]
b=alist
print(id(alist))
print(id(b))
alist.append('sgz')
print(alist)
print(b)
结果--->>
2826619187336
2826619187336
[1, 2, 3, ['a', 'b'], 'sgz']
[1, 2, 3, ['a', 'b'], 'sgz']
2、copy浅拷贝
copy.copy浅拷贝,默认指向地址会改变,修改其公共区域并且为可变对象时,双方都会改变,但是非公共区域或非可变对象添加的东西互不影响。可变对象list、set、dict,其他均为不可变对象。
import copy
alist=[1, 2, 3, ['a', 'b']]
c=copy.copy(alist)
print(id(c))
print(id(alist))
alist.append("sgz")
print(c)
print(alist)
alist[3].append('test')
alist.append(['s','g','z'])
alist[-1].append('ss')
print(alist)
print(c)
结果--->>
1957471063752
1957470269576
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 'sgz']
[1, 2, 3, ['a', 'b', 'test'], 'sgz', ['s', 'g', 'z', 'ss']]
[1, 2, 3, ['a', 'b', 'test']]
3、深拷贝 copy.deepcopy
深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下