有时如果有多个变量,初始值都是一样的列表的情况,我们常常会以如下方式定义
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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!