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

为何Python中用+=修改元组内列表时,列表改变却仍报错?

为什么元组内的列表用+=操作后,明明报错却还是被修改了?

我们都知道Python里的tuple(元组)是不可变对象,创建后没法直接修改它的元素。比如直接赋值替换元组里的列表:

my_tuple = ([1],[2],[3])
my_tuple[2] = [3,4,5]

会直接报错:

TypeError: 'tuple' object does not support item assignment

但如果换成+=操作:

my_tuple = ([1],[2],[3])
my_tuple[2] += [4,5]

同样会抛出上面的TypeError,但打印my_tuple时却发现里面的列表已经变了:

print(my_tuple)  # 输出: ([1], [2], [3, 4, 5])

核心原因:元组的“不可变”和+=的执行逻辑

  • 元组的不可变,指的是元组本身存储的是元素的引用(内存地址),这些引用不能被修改——你不能把元组里的某个元素换成另一个对象,但如果这个引用指向的是可变对象(比如列表、字典),那这个可变对象本身的内容是可以修改的。
  • +=操作对于列表来说,本质是两步:
    1. 先调用列表的extend()方法,原地修改列表内容:这一步会直接把[4,5]加到my_tuple[2]指向的那个列表里,此时列表已经变成[3,4,5]了。
    2. 尝试把操作后的结果重新赋值给my_tuple[2]:但元组不允许修改元素的引用,所以这一步会抛出TypeError。

简单说就是:+=的原地修改先完成了,之后的赋值操作才触发报错,所以列表内容已经变了,但元组本身的元素引用没被替换(还是原来那个列表的地址)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:22:03