您好,欢迎来到世旅网。
搜索
您的当前位置:首页使用copy模块来实现列表(list)拷贝

使用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]

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- esig.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务