扫码领取大额优惠劵
时间:2022-10-23 14:23:24 来源:洛阳尚贤科技
注意:拷贝时应优先选择浅拷贝。因为一层的列表不需要深拷贝, 即使多层列表,那它的内表通常是不变的,所以也用不到深拷贝。何必浪费内存。
举例说明:
list01 = [10, [20, 30]] #这里面有两层,即两个表
list02 = list01[:] #切片复制会复制一层得到新的列表地址(所以就2份了),复制后得到的是10的列表地址,和[20, 30] 的上一级列表地址,也就是说并没有得到[20, 30]本身的列表地址。总结:浅拷贝,*层数据两份,深层数据一份。
list02[0] = 100 # 因此,这里的修改是在新的列表地址上做的修改,两分互不影响,故不影响原表。
list02[1][1] = 300 #但是这里的第二个[1]对应的是原表中的内表,这个内表[20, 30] 的列表地址没有被list02 拷贝走。因此,它还是一份,根据一份互相影响的原则,这里的改动一定影响原表。
print(list02) # [100, [20, 300]] 可以看到list02的 *个数被改,但原表的*个数没改。
print(list01) #[10, [20, 300]] 不过原表的内表第二个数被改了。证明以上逻辑正确。这就是浅拷贝。
list02 = copy.deepcopy(list01)
优点:*互不影响
缺点:占内存较多
如果有两层,那深拷贝复制所有数据两份。所有数据是指:列表地址、上一级列表地址、数据地址等一切。
import copy # 这就是准备深拷贝工具
list01 = [10, [20, 30]]
list02 = copy.deepcopy(list01)
list02[0] = 100
list02[1][1] = 300
print(list02) # [100, [20, 300]]
print(list01) # [10, [20, 30]] #看,深拷贝做到了两个表*的互不影响!
手机:18537972228
电话:0379-64321586
Email:shangxian@sxglpx.com
地址:洛阳市涧西区九都西路181号中弘中央广场D座2705室