有时如果有多个变量,初始值都是一样的列表的情况,我们常常会以如下方式定义
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 print(a,"---",b)
运行的结果将是:[0, 2, 3, 'QQ:5201351'] --- [0, 2, 3, 'QQ:5201351']
对于初学者来说往往有点不容易接受,因为明明是a变量的值改变了,结果b变量的值也跟着一起变化了
上面方式的定义,实际上,是多个变量,同时指向到了同一个内存空间的列表的内容,列表是可以修改的,也可以理解成常规复制
如果需要将a与b指向不同的列表,就必须将其中一个关联到另一个变量的副本,可以通过列表的copy()方法
a=[1,2,3] b=a.copy() b[0]=0 print(a,"---",b)
这样就会输出:[1, 2, 3] --- [0, 2, 3],即a,b都是不同对象了,只是值都是一样的列表
但是注意一点,不能在多变量定义时使用列表的.copy(),也好理解 ,因为a=b=[1,2,3].copy() 这样写了之后和最前面的常规复制又一样了
另外还可以使用a[:] 或者 list(a) 的方式,也能实现真正的复制效果
a=[1,2,3] b=a[:] a[0]=0 print(a,"---",b)
这样会输出:[0, 2, 3] --- [1, 2, 3] ,即a与b彼此的改变,都不会影响到对方
将b=a[:] 改成 a=list(a),效果也是一样的,也是真正的复制效果,两个变量的内容都是指向不同的内存空间了
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/16754078.html
标签:QQ,变量,python,list,列表,---,5201351 From: https://www.cnblogs.com/5201351/p/16754078.html