在很多面试题中都会问到浅拷贝跟深度拷贝的区别, 前几天一个朋友也问到了我浅拷贝跟深度拷贝到底有什么区别, 这里就简单举栗子讲一下两者的区别.
浅拷贝 (copy()): 拷贝父对象, 不会拷贝对象的内部的子对象
深拷贝 ( copy.deepcopy()): 完全拷贝父对象跟子对象
- import copy
- l = [1, 2, ['a', 'b']]
- s_copy = l.copy() # 浅拷贝
- d_copy = copy.deepcopy(l) # 深拷贝
- l.append(3)
- l[2].append('c')
- print(l) # [1, 2, ['a', 'b', 'c'], 3]
- print(s_copy) # [1, 2, ['a', 'b', 'c']]
- print(d_copy) # [1, 2, ['a', 'b']]
通过上面的输出结果可以很好的看到, 深拷贝是直接复制了所有的父对象跟子对象, 原来的不管怎么变都跟他没关系, 浅拷贝只是复制了当前的父对象, 如果子对象发生变化, 浅拷贝也是会跟着改变的.
深入解析:
1,b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象, 但他们的子对象还是指向统一对象 (是引用).
2,b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象, 两者是完全独立的.
来源: http://www.bubuko.com/infodetail-2910777.html