Python copy用法之深浅拷贝

先摆结论:普通copy的用法只能copy一维列表,如果要对多元列表进行copy只能使用深拷贝,即deepcopy!

 探究过程:

先定义一个varlist列表,并对这个列表进行copy,并把copy的结果返回给newlist。

varlist=[1,2,3,4]
newlist=varlist.copy()
print(varlist)
print(newlist)

得到打印的结果为:

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

现在我们对这两个列表进行删除处理,删除任意一个元素,以删除2为例:

del newlist[1]
print(varlist,id(varlist))
print(newlist,id(newlist))

得到的打印结果为:

[1, 2, 3, 4] 2052082913800
[1, 3, 4] 2052082914312

可见对原列表进行删除操作并不会影响新列表,并且原列表和新列表的Id地址并不一样。然而当我们定义一个多元列表(以二元列表为例)结果却发生了变化:

varlist=[1,2,3,['a','b','c']]
newlist=varlist.copy()
del newlist[3][1]
print(varlist,id(varlist),id(varlist[3]))
print(newlist,id(newlist),id(newlist[3]))

打印结果:

[1, 2, 3, ['a', 'c']] 3110096622600 3110096622088
[1, 2, 3, ['a', 'c']] 3110097900872 3110096622088

发现对新列表中的二维数据进行操作对原列表也产生了同样的影响,当我们进行Id检测时,内侧列表的id值相同(3110096622088),因此copy用法对内侧的列表无法进行copy,因此称为浅拷贝

如果我们想要对多维列表进行copy就要通过深拷贝的方法进行copy,即deepcopy,方法如下:

首先通过import导入一个copy然后使用deepcopy()函数进行深拷贝。

import copy
varlist=[1,2,3,['a','b','c']]
newlist=copy.deepcopy(varlist)
del newlist[3][1]
print(varlist,id(varlist),id(varlist[3][1]))
print(newlist,id(newlist),id(newlist[3][1]))

打印结果为:

[1, 2, 3, ['a', 'b', 'c']] 1587765855560 1587763339696
[1, 2, 3, ['a', 'c']] 1587765855880 1587762504688

这样我们就成功的对多维列表进行了拷贝。

希望这篇博客能对大家带来帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值