Python中+=运算符与普通加法赋值表现不一致问题咨询
Python 列表
+ 与 += 运算符的行为差异 这两个赋值表达式并不等价,二者底层实现逻辑完全不同,具体差异如下:
1. c1 = c1 + c2 报错的原因
+ 运算符调用列表的__add__方法,逻辑是生成一个全新的列表对象,要求加号两侧必须是同类型(都是列表)才能执行拼接。
你代码中c1是列表类型,c2是字符串类型,类型不匹配,因此直接抛出TypeError。
如果要让该语句正常执行,需要把c2显式转换为列表:
c1 = c1 + list(c2)
2. c1 += c2 正常运行的原因
+= 运算符调用列表的__iadd__方法(in-place add,原地修改),逻辑是直接修改原列表对象,不会生成新对象,只要求右侧是任意可迭代对象即可,不需要和左侧类型一致,内部等价于执行c1.extend(c2)。
字符串本身属于可迭代对象,会被逐个遍历取出字符追加到原列表末尾,执行后c1的结果为[2, 5, 8, 9, 'h', 'e', 'l', 'l', 'o'],完全符合语法规则。
核心差异总结
+操作属于结果生成类操作,要求操作数类型严格匹配,返回新对象+=操作属于原地修改类操作,仅要求右操作数是可迭代对象,直接修改原对象,内存地址不会变化
内容的提问来源于stack exchange,提问作者Chandan Kumar Singh
相关产品推荐
相关产品推荐

