在学deepcopy
import copy
l=[["a","b"],2,3,4,5]
s=copy.copy(l)
d=copy.deepcopy(l)
print("l:",l,id(l),"***","d:",d,id(d),"***","s:",s,id(s))
l[1]="x" #为什么这里shallow copy不跟着变呢?
print("l:",l,id(l),"***","d:",d,id(d),"***","s:",s,id(s))
l[0][0]=100 #为什么这里shallow copy跟着变呢,是不是shallow copy只更新“二级嵌套“的变化?
print("l:",l,id(l),"***","d:",d,id(d),"***","s:",s,id(s))
结果
l: [['a', 'b'], 2, 3, 4, 5] 39303688 d: [['a', 'b'], 2, 3, 4, 5] 39408072 s: [['a', 'b'], 2, 3, 4, 5] 39406984
l: [['a', 'b'], 'x', 3, 4, 5] 39303688 d: [['a', 'b'], 2, 3, 4, 5] 39408072 s: [['a', 'b'], 2, 3, 4, 5] 39406984
l: [[100, 'b'], 'x', 3, 4, 5] 39303688 d: [['a', 'b'], 2, 3, 4, 5] 39408072 s: [[100, 'b'], 2, 3, 4, 5] 39406984
我的直觉是shallow copy是原对象做了什么调整,shallow copy出的对象就做什么调整,形成一个镜像,而deepcopy就是一个复制出来的完全独立的,与原对象无关的对象。
实际测试不是这个样子,感觉shallow copy 只会更新“”二级对象“”“,为什么呢?这样设置的shallow copy 有何妙用?
深拷贝和浅拷贝中有一个特殊的规则,对于非容器类型(如数字、字符串、和其他'原子'类型的对象)没有拷贝这一说
也就是说,对于这些类型,"obj is copy.copy(obj)" 、"obj is copy.deepcopy(obj)"。
详细的可以看下这篇文章,讲的很详细:
http://www.cnblogs.com/wilber...