目录
现象
原因
源码
+=的源码:
+的源码:
先上代码:
方式一:
>>> a = [] >>> a += 'a' >>> a ['a']方式二:
>>> a = [] >>> a = a + 'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list >>>首先定义了一个空列表用变量a表示,方式一是对a执行+=操作,方式二是对a执行的+操作,但是得到的结果却是不一样。有python基础的同学肯定第一反应就是应该报错呀,不同的数据类型之间不能进行运算呀,没错,我的第一反应也是酱紫的,但是实践出真知,python又捉弄了我们一把。那么到底为什么能执行成功呢?
python中列表的+=相当于执行的是extend操作,在上述代码中也就是将右侧的字符串'a'添加到了变量a中,所以命令行下调用a时,显示的是有一个值为'a'的列表;但是对列表执行+操作时,操作数必须是列表,所以就出现了上面的情况。而且+操作会生成一个新的对象,而+=还是操作的原来的对象,如:
+=操作:
>>> a = [1] >>> id(a) 2535493303944 >>> a += [2,3,4] >>> a [1, 2, 3, 4] >>> id(a) 2535493303944+操作:
>>> a = [1] >>> id(a) 2535493303944 >>> a = a + [2,3,4] >>> a [1, 2, 3, 4] >>> id(a) 2535493303752我们可以看到+操作后变量a的地址已经发生了变化,而+=之后变量a还是之前的地址
参考链接:
https://www.cnblogs.com/shixisheng/p/7356835.html