1)copy就是浅copy,意思是把对象a的所有内容,找到一个内存空间再存放一份,再赋值为新的变量。比如:
a=[1,2,3] from copy import copy cpy_a = copy(a) print(a) # 此时a的结果为[1,2,3] print(cpy_a) # 此时cpy_a的结果为[1,2,3] # 这一步是对cpy_a进行操作 cpy_a.append(4) # 接下来输出a和cpy_a的结果,看对cpy_a的操作是否会影响到a的值 print(a) # 此时a的结果为[1,2,3] print(cpy_a) # 此时cpy_a的结果为[1,2,3,4]
注意区分:copy和赋值,赋值是简单的写了个别名,比如:
a=[1,2,3] b=a
此时id(a)如果是664d6w,那么id(b)也是664d6w,两者的地址一样,只是名字不同,与浅copy是不一样的
针对只含有值的对象来说,浅copy就可以满足,但如果一个对象中又含有其他对象,使用浅copy就只会把包含的id给
复制一份,那么对新对象的内容的操作就会影响到旧对象的内容。此时就只能使用深拷贝deepcopy,即递归查找引用对象,找到内存单元,拷贝内容并开辟内存空间,再存放一份。
a=[1,2] b=[a,a]#这里是直接引用,就是对象包含对象,想拷贝只能使用深拷贝 from copy import deepcopy dcpy_b=deepcopy(b) print(b) # 此时b的结果为[[1,2],[1,2]] print(dcpy_b) # 此时c的结果为[[1,2],[1,2]] # 对dcpy_b进行操作 dcpy_b[0].append(3) # 接下来输出b和dcpy_b的结果 print(b) # 此时b的结果为[[1,2],[1,2]] print(dcpy_b) # 此时dcpy_b的结果为[[1,2,3],[1,2,3]]
对深拷贝deepcopy后的内容(dcpy_b)做修改不会影响到原内容(b)。
原文:https://www.cnblogs.com/liya1014/p/14751554.html