python深浅拷贝学习
1.python深浅拷贝学习
copy的原文链接(仅供自己学习查看):
python 浅析格式化输出和深浅copy - 战争热诚 - 博客园 (cnblogs.com)
首先我们从切片技术说起。它应用于所有的序列,包括:列表,字符串,元祖。但是切片不能应用于字典,对于字典只能使用D.copy() 和 D.deepcopy()方法。
下面具体说一下深浅copy,可以应用于序列,也可以应用于字典
1 import copy 2 >>> a = [1,['m']] 3 >>> b = a # b采用赋值的方式 4 >>> c = copy.copy(a) # c采用浅拷贝 5 >>> d = copy.deepcopy(a) # d采用深拷贝 6 >>> e = copy.copy(a) # e采用浅拷贝 7 >>> f = copy.deepcopy(a) # f采用深拷贝 8 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f) 9 [1, ['m']] 10 [1, ['m']] 11 [1, ['m']] 12 [1, ['m']] 13 [1, ['m']] 14 [1, ['m']] # 无论是赋值,深浅拷贝,可以得到相同的值 15 >>> print(id(a),id(b),id(c),id(d),id(e),id(f)) 16 2390627562824 2390627562824 2390627564168 2390627564744 2390627565000 2390627565128 17 # 只有通过赋值得到的b使用了与a同样的地址,深浅拷贝都分配了不同的内存空间,而且每拷贝一次都会得到一个新的空间 18 19 >>> a.append(2) # 对父级对象修改,增加一个值 20 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f) 21 # 从结果看出只有赋值的收到影响 22 [1, ['m'], 2] 23 [1, ['m'], 2] 24 [1, ['m']] 25 [1, ['m']] 26 [1, ['m']] 27 [1, ['m']] 28 >>> a[1].append('n') # 对内部对象进行修改 29 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f) 30 # 从结果看出赋值的,以及浅拷贝的收到了影响 31 [1, ['m', 'n'], 2] 32 [1, ['m', 'n'], 2] 33 [1, ['m', 'n']] 34 [1, ['m']] 35 [1, ['m', 'n']] 36 [1, ['m']] 37 >>>
原式和赋值进行改动均会对其有影响(一级目录改动,多级目录嵌套改动)
如果源对象只有一级目录的话,源对象做任何改动,不影响深浅拷贝对象
如果源对象不止一级目录的话,源对象做任何改动,都要影响浅拷贝,但不影响深拷贝
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象(可以理解为初始的内容)
合集:
python学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY