首先两种拷贝的写法不同。
浅拷贝:list2 = list1.copy()
深拷贝:
import copy
list3 = copy.deepcopy(list1)
其次对于深浅拷贝,其区别无非在于改变列表中的值后所发生的改变。
这种改变最显现差异的地方则列表中的可变类型与不可变类型的值。
其中可变类型是指:列表、字典;不可变类型是指:字符串、数字、元组。
在进行拷贝之后,无论深浅拷贝,对源列表中的不可变类型进行修改,都不会影响拷贝后的列表。
然而,倘若对源列表中的可变类型进行修改,则会出现不一样的情况。
举个例子,若是修改了源列表中嵌套列表的值,那么浅拷贝列表中,嵌套列表的值也会随之改变;深拷贝列表的值则不会被修改。
同样的,若是修改了浅拷贝列表的嵌套列表的值,源列表也会被修改;深拷贝列表也不会被修改。
若是修改深拷贝列表的嵌套列表的值,则源列表与浅拷贝列表都不会被影响修改。
其原理是:
在浅拷贝时,拷贝列表中可变类型值的指向跟源列表中的指向是一样的。但是,深拷贝则是在独立拷贝源列表的基础上,把源列表里面的可变类型也重新独立复制。
可视化后如下图所示: