Python之浅拷贝和深拷贝
介绍
如果你学习过别的编程语言,比如java,那么应该知道shallowcopy和deep copy。在Python中,copy也有深浅之分,而且与直接复制各不相同。
用法
1. 浅拷贝
a = {'n':[1,2,3]}
b = a.copy()
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})
a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3, 4]})
2. 深拷贝
import copy
a = {'n':[1,2,3]}
b = copy.deeepcopy(a)
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})
a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3]})
3. 区别
从上面两个例子我们可以看到,使用浅拷贝b会随a的变化而变化,因为他们share的是同一个list地址,而深拷贝中,b和a有独立的list地址互不影响。
而且拷贝与赋值不同,如果是赋值操作,a和b会share同一个字典对象,而拷贝时a和b有各自的字典对象,只不过字典内的list不同而已。
注意,使用深拷贝要import模块copy!