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中的行为相同
所以行为+=有点奇怪。对于像整数这样的不可变对象,它必须将一个新对象分配给相同的名称:
a = 4
a += 3
Run Code Online (Sandbox Code Playgroud)
对于可变类型(例如列表),对象会就地更改,但也会返回要分配给相同名称的相同对象。第一步适用于您的元组,但不适用于第二步。
这就是为什么在扩展列表后会引发异常。