浅拷贝与深拷贝拷贝出来的均是一个对象,但他们的本质区别是源拷贝对象里的元素是可变类型还是不可变类型,如果源拷贝对象里的元素是可变类型且用浅拷贝,那么源拷贝对象与目标拷贝对象里的元素会互相影响,如果用深拷贝的话会互不影响。
举例:
①浅拷贝
a=[1,2,3,[4,5,6]]
b=a
②浅拷贝
import copy
a=[1,2,3,[4,5,6]]
c=copy.copy(a)
a.append(6)
a[3].append(7)
③深拷贝
import copy
a=[1,2,3,[4,5,6]]
d=copy.deepcopy(a)
a.append(7)
d[3].append(2)
总结:
①在确定不发生任何冲突的情况下,可以用浅拷贝,效率上会提升且节省内存;
②如果不确定避免数据互相影响,用深拷贝;
③深拷贝会把可变对象也连同复制一份,浅拷贝是共享可变对象。
注:常用可变对象(字典、集合、列表),常用不可变对象(字符串、整型、元组)
推荐画图站:http://pythontutor.com/live.html#mode=edit