- 正常赋值语句会使左操作数简单地指向右操作数指向的对象。
深拷贝和浅拷贝之间的区别仅对复合变量起作用,复合变量指的是对象中又包含了对象,如list,class,dict。
- 一次浅拷贝会构造一个新的复合对象,然后将原始对象中的所有引用插入到新的复合对象中。
- 一次深拷贝也会构造一个新的复合对象,但会递归地将原始对象中的所有对象拷贝一份到新的复合对象中。
对于非复合变量, 赋值语句,深拷贝,浅拷贝都实现的是赋值语句功能。
例子:
import copy
a = [1, 2, 3]
d = [4, 5, 6]
c = [a, b]
如果使用正常赋值语句:
d = c
print id(c) == id(d) # True - d和c指向同一个对象
print id(c[0]) == id(d[0]) # True - d[0]和c[0]当然也是同一对象
使用浅拷贝的话:
d = copy.copy(c)
print id(c) == id(d) # False - d是一个新对象,浅拷贝会构造一个新的复合对象
print id(c[0]) == id(d[0]) # True - 但复合对象中的对象不会复制,和原来的指向一样
使用深拷贝的话:
d = copy.deepcopy(c)
print id(c) == id(d) # False - d同一是个全新的复合对象
print id(c[0]) == id(d[0]) # False - 复合对象中对象也同样进行拷贝