博客园  :: 首页  :: 管理

有时如果有多个变量,初始值都是一样的列表的情况,我们常常会以如下方式定义

a=b=[1,2,3,"QQ:5201351"],或者 b=[1,2,3,"QQ:5201351"] ; a=b

但是对于列表这样定义,如果不对其有着清晰的理解 ,后续的有些操作的结果可能会超乎自己的意料,如下:

a=b=[1,2,3,"QQ:5201351"]
a[0]=0
b[1]=1
print(a,"---",b)

运行的结果将是:[0, 1, 3, 'QQ:5201351'] --- [0, 1, 3, 'QQ:5201351']

对于初学者来说往往有点不容易接受,变量a值变了,变量b也会跟着一起变,反之效果一样

上面方式的定义,实际上,是多个变量,同时指向到了同一个内存空间的列表的内容,列表是可以修改的,也可以理解成常规复制

如果需要将a与b指向不同的列表,就必须将其中一个关联到另一个变量的副本,可以通过列表的.copy()方法

a=[1,2,3]
b=a.copy()
a[0]=0
b[1]=1
print(a,"---",b)

这样就会输出:[0, 2, 3] --- [1, 1, 3],即a与b是两个独立的列表了,彼此的改变都不会影响到对方

但是注意一点,不能这样,a=b=[1,2,3].copy() 在定义的时候就使用列表的.copy(),这样写了之后和最前面的常规复制又一样了

另外还可以使用a[:] 或者 list(a) 的方式,也能实现真正的复制效果

a=[1,2,3]
b=a[:]
a[0]=0
b[1]=1
print(a,"---",b)

这样会输出:[0, 2, 3] --- [1, 1, 3],即a与b彼此的改变,都不会影响到对方

将b=a[:] 改成 a=list(a),效果也是一样的,也是真正的复制效果,两个变量的内容都是指向不同的内存空间了

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/16754078.html