You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中+=运算符与n=n+v为何执行结果存在差异?

为什么Python中n += v和n = n + v对列表的表现不同?

之前我认为n = n + v与n += v功能等价,但实际测试发现结果不同:

使用+=的代码示例

def assign_value(n, v):
    n += v
    print(n)

l1 = [1, 2, 3]
l2 = [4, 5, 6]

assign_value(l1, l2)
print(l1)

输出:

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]

使用n = n + v的代码示例

def assign_value(n, v):
    n = n + v
    print(n)

l1 = [1, 2, 3]
l2 = [4, 5, 6]

assign_value(l1, l2)
print(l1)

输出:

[1, 2, 3, 4, 5, 6]
[1, 2, 3]

差异原因

两者的核心区别在于是否修改原对象:

  • +=是增量赋值运算符,对于列表这类可变对象,它会调用对象的__iadd__方法,直接在原内存地址上修改对象内容。函数中的参数n和外部的l1指向同一个列表对象,所以函数内的修改会同步反映到外部的l1上。
  • n = n + v会先执行n + v,这个操作会创建一个全新的列表对象,然后把函数内的局部变量n重新指向这个新对象。此时函数内的n和外部的l1已经是两个不同的对象,所以外部的l1不会被改变。

你可以通过打印id(n)验证这个差异:在+=的函数中,修改前后n的内存地址完全一致;而在n = n + v的函数中,修改后n的地址会变成新对象的地址。

内容的提问来源于stack exchange,提问作者Phoenix IV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:30:43