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,对象,深浅,拷贝,copy,id,赋值 From: https://www.cnblogs.com/winBlack/p/17802424.html