Skip to main content
 首页 » 编程设计

python之iadd 运算符 ( += ) 与简单加法有何不同

2025年05月04日17sky-heaven

<分区>

我一直认为 x += 1 只是语法速记(并且完全等同于)x = x + 1,直到我花了一段时间试图找出原因此代码未按预期运行:

[ipython/euler 72 ]$ def func(mylist): 
    mylist += random.sample(range(100),2) 
    # do stuff with the random result, then restore original list 
    mylist = mylist[:-2] 

它应该返回它得到的相同列表,但它似乎不是那样工作的:

[ipython/euler 81 ]$ x = [1,2,3] 
 
[ipython/euler 82 ]$ func(x) 
[1, 2, 3, 23, 7] 
 
[ipython/euler 83 ]$ func(x) 
[1, 2, 3, 23, 7, 42, 36] 
 
[ipython/euler 84 ]$ func(x) 
[1, 2, 3, 23, 7, 42, 36, 0, 5] 

如果我将赋值语句更改为长格式 mylist = mylist + ...,它会按预期工作并保持列表不变。

为什么会这样?我认为这与列表可变有关,并且当作为列表的重载方法调用时 iadd 可能不是“真正的”加法,但我仍然希望解释器将它们视为等同的。