在python中,+=属于增量赋值运算符的一种,它的核心作用是将左侧变量的当前值和右侧的值进行对应运算后,再将结果赋值回左侧变量,本质是简化赋值和运算结合的代码书写。

+=的基本定义
从语法层面来看,a += b等价于a = a + b,但二者在部分场景下存在细微差异,后续会详细说明。+=支持python中大部分支持加法操作的数据类型,不同数据类型的运算规则由对应类型的__iadd__方法决定,如果没有实现该方法,则会 fallback 到__add__方法执行运算。
不同数据类型下的运算规则
数值类型
对于int、float、complex等数值类型,+=执行的是数值加法运算,将右侧数值加到左侧变量上,再赋值回左侧变量。
# 整数运算 num = 10 num += 5 print(num) # 输出15 # 浮点数运算 price = 19.9 price += 2.1 print(price) # 输出22.0 # 复数运算 c = 1 + 2j c += 3 + 4j print(c) # 输出(4+6j)
字符串类型
字符串的+=执行的是字符串拼接操作,将右侧字符串拼接到左侧字符串末尾,生成新的字符串对象赋值给左侧变量。
s = "hello" s += " world" print(s) # 输出hello world # 拼接其他类型会报错 s2 = "test" # s2 += 123 # 这行代码会抛出TypeError,字符串只能和字符串拼接
列表类型
列表的+=执行的是列表扩展操作,将右侧可迭代对象的元素逐个添加到左侧列表末尾,注意这个操作会修改原列表本身,而不是生成新列表。
lst = [1, 2, 3] lst += [4, 5] print(lst) # 输出[1, 2, 3, 4, 5] # 也可以拼接其他可迭代对象 lst += (6, 7) print(lst) # 输出[1, 2, 3, 4, 5, 6, 7]
元组类型
元组的+=执行的是元组拼接操作,生成新的元组对象赋值给左侧变量,因为元组是不可变类型,无法修改原对象。
t = (1, 2) t += (3, 4) print(t) # 输出(1, 2, 3, 4)
+=和a = a + b的区别
大部分场景下二者结果一致,但在可变对象场景下存在差异:
- 对于不可变类型(数值、字符串、元组),二者完全等价,都会生成新对象赋值给左侧变量。
- 对于可变类型(列表、字典等),如果类型实现了
__iadd__方法,+=会调用该方法修改原对象,而a = a + b会先执行加法生成新对象,再赋值给a,原对象不会被修改。
# 列表场景差异示例 lst1 = [1, 2] lst2 = lst1 lst1 += [3] print(lst1) # 输出[1, 2, 3] print(lst2) # 输出[1, 2, 3],因为lst1修改了原对象,lst2和lst1指向同一个对象 lst3 = [1, 2] lst4 = lst3 lst3 = lst3 + [3] print(lst3) # 输出[1, 2, 3] print(lst4) # 输出[1, 2],lst3指向了新对象,lst4还是指向原来的对象
使用注意事项
- 使用+=时要确保左侧变量已经被初始化,否则会抛出
NameError。 - 不同数据类型之间不能随意使用+=,比如数值和字符串混合使用会直接报错。
- 对于可变对象,要注意+=是否会修改原对象,避免因为变量引用导致意外的数据变更。