使用copy模块来实现列表(list)拷贝

先来个简单的操作:

a=[1,2,3]
b=a
b.remove(1)
print('a=',a)
print('b=',b)

会发现结果:

a=[2,3]
b=[2,3]

是不是很奇怪,我修改b,为什么a的值也跟着改变了呢?
——这种做法其实并未真正生成一个新的列表,b指向的仍然是a所指向的对象。这样,如果对a或b的元素进行修改,a,b的值同时发生变化。

所以要不改变a的值,需要使用copy来进行拷贝,此时进行如下操作:

a=[1,2,3]
b=a.copy()
b.remove(1)
print('a=',a)
print('b=',b)

会发现结果变成:

a=[1,2,3]
b=[2,3]

从而不会导致a的值的改变,此处的copy使用也可以用b=a[:]来代替

但是,需要注意的是
如果a=[1,[2,3],4],此时的copy()会对a[1]进行复制引用处理,而不会形成新的表,举例:

a=[1,[2,3],4]
b=a.copy()
b[1].append(5)
print('a1=',a)
print('b1=',b)
b.append(6)
print('a2=',a)
print('b2=',b)

结果是:

a1=[1,[2,3,5],4]
b1=[1,[2,3,5],4]
a2=[1,[2,3,5],4]
b2=[1,[2,3,5],4,6]

从上可知,对b[1]进行操作,会影响a
那怎么解决这个问题呢?这时就需要使用copy模块中的deepcopy函数了。

import copy;
a=[1,[2,3],4]
b=copy.deepcopy(a)
b[1].append(5)
print('a1=',a)
print('b1=',b)
b.append(6)
print('a2=',a)
print('b2=',b)

结果会是:

a1=[1,[2,3],4]
b1=[1,[2,3,5],4]
a2=[1,[2,3],4]
b2=[1,[2,3,5],4,6]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值