考虑以下:
>>> t = ([],)
>>> t[0].extend([12, 34])
>>> t
([12, 34],)
>>> t[0] += [56, 78]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
([12, 34, 56, 78],)
>>>
Run Code Online (Sandbox Code Playgroud)
我知道元组是不可变的,但LHS中的项目不是元组! (事实上,预期的分配成功,尽管有错误信息,但整个场景只会更奇怪.)
为什么这种行为不被视为错误?
t[0] += [56, 78]
Run Code Online (Sandbox Code Playgroud)
是的缩写
t[0] = t[0].__iadd__([56, 78])
Run Code Online (Sandbox Code Playgroud)
哪里t是元组.该t[0].__iadd__([56, 78])部分更改列表,但结果不能存储为t[0].
Python中的LHS始终是一个名称,而不是一个值.在每个Python表达式中,RHS被评估为一个值并分配给LHS上的名称.在这种情况下,名称t[0]无法分配,因为它t是一个元组.