You need to enable JavaScript to run this app. Python列表在for循环内`+=`与直接用`+`拼接字符串的行为差异
优惠活动
大模型
产品
解决方案
定价
更多

Python列表在for循环内`+=`与直接用`+`拼接字符串的行为差异

列表操作中 += 与 + 的行为差异解析

两段代码的运行逻辑差异

  • 代码1正常输出的本质
    代码里的display += "_",对列表来说触发的是原地扩展逻辑。这个操作的兼容规则是:只要传入的内容是可迭代对象,就会把内容里的每个元素拆出来,逐个追加到原列表末尾。
    单字符的"_"本身是可迭代的,迭代时会取出自身的字符,因此display += "_"实际和调用display.extend("_")效果完全一致,循环2次后自然就得到包含两个"_"元素的列表。
  • 代码2触发报错的本质
    代码里的dis + "_",走的是列表的拼接逻辑,这个逻辑有严格的类型要求:只能和另一个列表做拼接,不接受任意其他类型的可迭代对象。直接把字符串当拼接参数,类型不匹配,就会抛出提示的拼接类型错误。

容易踩的认知误区

不少人会把a += b当成a = a + b的简写,这个认知在Python的列表这类可变对象上是完全不成立的:

  • a = a + b:要求左右两边类型完全一致,运行后会生成一个全新的列表,再把新列表赋值给变量
  • a += b:直接修改原来内存里的列表对象,只要传入的是可迭代对象,不管是什么类型,都会被拆成元素追加进去,全程不会生成新的列表对象

可以用几行代码直观看到区别:

# 验证 += 的兼容特性
demo = []
demo += "abc"
print(demo) # 输出 ['a', 'b', 'c']

# 验证 + 的严格要求
demo = []
# demo + "abc" # 这行直接报类型错误
demo = demo + ["abc"] # 只有右操作数是列表才能正常运行
print(demo) # 输出 ['abc']

内容的提问来源于stack exchange,提问作者Bharti Sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.12 10:57:04