Python中的元组赋值,这是Python中的错误吗?

Dev*_*evC 8 python tuples list python-2.7 python-3.x

我正在阅读这篇有趣的帖子https://asmeurer.github.io/blog/posts/tuples/

脚注作者提出了这个例子

>>> t=1,2,[3,4]
>>> t
(1, 2, [3, 4])
>>> t[2]+=[5,6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

虽然Python已经引发了异常但它确实改变了元组

>>> t
(1, 2, [3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)

不确定这里发生了什么,这是一个错误吗?

2.7.10和3.5.1中的行为相同

Dan*_*iel 3

所以行为+=有点奇怪。对于像整数这样的不可变对象,它必须将一个新对象分配给相同的名称:

a = 4
a += 3
Run Code Online (Sandbox Code Playgroud)

对于可变类型(例如列表),对象会就地更改,但也会返回要分配给相同名称的相同对象。第一步适用于您的元组,但不适用于第二步。

这就是为什么在扩展列表后会引发异常。