深拷贝与浅拷贝的联系与区别

首先两种拷贝的写法不同。

浅拷贝:list2 = list1.copy()

深拷贝

import copy

list3 = copy.deepcopy(list1)

其次对于深浅拷贝,其区别无非在于改变列表中的值后所发生的改变。

这种改变最显现差异的地方则列表中的可变类型与不可变类型的值。

其中可变类型是指:列表、字典;不可变类型是指:字符串、数字、元组。

在进行拷贝之后,无论深浅拷贝,对源列表中的不可变类型进行修改,都不会影响拷贝后的列表

 

 

 然而,倘若对源列表中的可变类型进行修改,则会出现不一样的情况

举个例子,若是修改了源列表中嵌套列表的值,那么浅拷贝列表中,嵌套列表的值也会随之改变;深拷贝列表的值则不会被修改。

同样的,若是修改了浅拷贝列表的嵌套列表的值,源列表也会被修改;深拷贝列表也不会被修改。

若是修改深拷贝列表的嵌套列表的值,则源列表与浅拷贝列表都不会被影响修改。

 

其原理是:

浅拷贝时,拷贝列表中可变类型值的指向跟源列表中的指向是一样的。但是,深拷贝则是在独立拷贝源列表的基础上,把源列表里面的可变类型也重新独立复制。

可视化后如下图所示:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值