先来个简单的操作:
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]
因篇幅问题不能全部显示,请点此查看更多更全内容