Python 深浅拷贝

**拷贝有很多方法

:**

  1. copy.copy()浅拷贝
  2. copy.deepcopy()深拷贝
  3. 可以通过‘=’进行拷贝

但是这三种方法有什么相同之处和不同之处呢?下面就看看这些方法的不同之处吧。

以拷贝列表list为例:
首先引入Python copy包:
在这里插入图片描述

浅拷贝:

在这里插入图片描述

从结果中看出,输出的列表a、b内容一致。
对列表b中的单个元素记性修改

在这里插入图片描述

从结果中看出,列表b修改单一元素,对列表a的元素不影响。

在这里插入图片描述

查看输出结果发现,列表a中嵌套的列表元素也被修改。

这是为啥呢? 引用图解释

在这里插入图片描述

b列表复制a列表内的元素后,会指向a列表元素的内存地址

在这里插入图片描述

当修改b列表中的嵌套列表元素是,b先找到对应列表的内存地址0088,然后再找到对应的列表元素,
使其从新指向修改后的新的元素的内存地址。由于列表a、列表b指向的是同一个嵌套列表的内存地址,
所以当b对嵌套列表进行修改,响应的a的嵌套列表的元素也会发生改变。
可以看出,浅拷贝只是copy最外层的内容,所以浅拷贝不是完全拷贝。

**

深拷贝:

**
在这里插入图片描述

列表a、b的元素相同
对列表b的单一元素进行修改

在这里插入图片描述

列表b对单一元素的修改对列表a的元素不影响
对列表b中的嵌套列表中的元素进行修改

在这里插入图片描述

查看结果,b的修改对原a的元素也不影响.
可以看出,经过深拷贝,拷贝前后的列表对本身元素的修改都不会影响另一个列表的元素。
所以,深拷贝是完全拷贝

**

‘=’:

**
在这里插入图片描述

从图中看出,a赋值给b,b将指向a中各个元素的内存地址,
当其中b进行修改元素之,a中的元素也会修改。
因为a、b公用一个内存地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhaoDream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值