TypeError: 'tuple' object does not support item assignment
运行下面代码tup = (,)
tup += (4,5,6)
生成此错误:
TypeError: 'tuple' object does not support item assignment
虽然这段代码:
tup = (,)
try:
tup += (4,5,6)
except TypeError:
print tup
然而输出tup:
(, )
这种行为是合理的吗?
是的,这是合理的。
元组无法更改。像列表一样的元组是指向其他对象的结构。它并不关心那些对象是什么。它们可以是字符串,数字,元组,列表或其他对象。
因此,对元组中包含的某个对象执行任何操作,包括如果它是列表,则附加到该对象,与元组无关。
或者另一个例子:
>>> l1 =
>>> l2 =
>>> t = (l1, l2)
>>> l3 =
>>> l3.append(7)
由列表和元组引用的两个可变列表。最后一行不会报错。
如果你想要一个连续结构的不可变对象,那么它应该一直是元组。
为什么会出错?
l =
tup = (l,)
tup += (4,5,6)
相当于:
l =
tup = (l,)
x = tup
x = x.__iadd__() # like extend, but returns x instead of None
tup = x
该__iadd__行成功,并修改第一个列表。所以列表已经改变了。该__iadd__调用返回变异列表。
第二行尝试将列表分配回元组,这会失败。
因此,在程序结束时,列表已被扩展,但操作的第二部分+=失败。
嗯,我想tup += (4, 5, 6)等价于:
tup = tup.__iadd__((4,5,6))
tup.__iadd__((4,5,6))通常在第一个元素中更改列表。但由于元组是不可变的,因此赋值失败
页:
[1]