- 论坛徽章:
- 0
|
回复 #10 lin_style 的帖子
我以前也困惑过
我把我前面的回复总结下
copy.deepcopy是深copy
深copy 的意思就是所拷即所得,你copy对象是什么 那么新生成对象就是什么,他是个独立的对象,他的行为更像我们映像中的copy. 你不要想去其他的内部索引之类的,你所看到的是什么,deepcopy后就是什么,完全一样并且独立。
copy.copy()和 [:]都是浅copy
如果你的容器里 没有其他可变容器的情况下,那么他的行为和deepcopy一样,如果有其他可变容器比如说
>>> a=[1,2,3,{'a':'b'}]
>>> b=a[:]
>>> a[3]['a']='c'
>>> print a
[1, 2, 3, {'a': 'c'}]
>>> print b
[1, 2, 3, {'a': 'c'}]
上面的例子中 内部的容器跟着变了
在看下面的
>>> a[0]='a'
>>> print a
['a', 2, 3, {'a': 'c'}]
>>> print b
[1, 2, 3, {'a': 'c'}]
2者的区别是 一个是对 a进行修改,而b是个独立的copy 所以b没有变
但是 a[3]['a']='c' 修改的原始对象 所以修改被继承了
在看这个
>>> a=[1,2,3,[1,2,3]]
>>> b=a[:]
>>> a[3]=4
>>> print a
[1, 2, 3, 4]
>>> print b
[1, 2, 3, [1, 2, 3]]
他修改的是a[3] 所以b没跟着变 |
|