python的深拷贝与浅拷贝

给出一个列表

x=[1,2,3,4]

进行如下操作

y=x
y[0]=10
print(x)

[10,2,3,4]

用这种方式将x的值赋给y之后,修改y中的元素也会改变x中的元素。
因为y和x都是对同一块内存空间的引用。

我们可以创造x的一个浅拷贝

y=x[:]  #或者
y=x.copy()
y[0]=10
print(x)

[1,2,3,4]   #此时修改y的值,x不发生改变

重新定义一个新的列表x

x=[1,2,[3,4]]
y=x.copy()
y[0],y[2][0]=10,10
print(y)
print(x)

[10, 2, [10, 4]]
[1, 2, [10, 4]]

y的元素自然改变了,但是x中的一级元素发生改变,二级元素并没有发生改变。

浅拷贝,让一级元素有了独立的内存空间,二级元素仍然指向了被拷贝对象的二级元素的内存区域。即浅拷贝只复制了父对象,而不复制内部子对象。

我们这次导入copy模块

import copy
x=[1,2,[3,4]]
y=copy.deepcopy(x)
y[0],y[2][0]=10,10
print(y)
print(x)

[10, 2, [10, 4]]
[1, 2, [3, 4]]

此时一级元素和二级元素都没有发生改变。

python的默认拷贝方式是浅拷贝
时间角度:浅拷贝花费时间更少;
空间角度:浅拷贝花费内存更少;
效率角度:浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cachel wood

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

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

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

打赏作者

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

抵扣说明:

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

余额充值