所以我有这个代码:
tup = ([1,2,3],[7,8,9])
tup[0] += (4,5,6)
Run Code Online (Sandbox Code Playgroud)
这会产生此错误:
TypeError: 'tuple' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
虽然这段代码:
tup = ([1,2,3],[7,8,9])
try:
tup[0] += (4,5,6)
except TypeError:
print tup
Run Code Online (Sandbox Code Playgroud)
打印这个:
([1, 2, 3, 4, 5, 6], [7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
这种行为有望吗?
我意识到这不是一个非常常见的用例.但是,虽然预计会出现错误,但我没想到列表会发生变化.
考虑以下:
>>> 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中的项目不是元组! (事实上,预期的分配成功,尽管有错误信息,但整个场景只会更奇怪.)
为什么这种行为不被视为错误?
我对修改元组成员有点困惑.以下不起作用:
>>> thing = (['a'],)
>>> thing[0] = ['b']
TypeError: 'tuple' object does not support item assignment
>>> thing
(['a'],)
Run Code Online (Sandbox Code Playgroud)
但这确实有效:
>>> thing[0][0] = 'b'
>>> thing
(['b'],)
Run Code Online (Sandbox Code Playgroud)
还有效:
>>> thing[0].append('c')
>>> thing
(['b', 'c'],)
Run Code Online (Sandbox Code Playgroud)
不起作用,并且有效(嗯?!):
>>> thing[0] += 'd'
TypeError: 'tuple' object does not support item assignment
>>> thing
(['b', 'c', 'd'],)
Run Code Online (Sandbox Code Playgroud)
看似与以前相同,但有效:
>>> e = thing[0]
>>> e += 'e'
>>> thing
(['b', 'c', 'd', 'e'],)
Run Code Online (Sandbox Code Playgroud)
那么,当你能够并且不能修改元组内的某些内容时,游戏的规则到底是什么?它似乎更像禁止使用赋值成员的赋值运算符,但最后两个案例让我感到困惑.
我发现了一些TypeError: 'tuple' object does not support item assignment关于SO的问题,但我仍然对此感到困惑:
考虑代码段:
>>> a = ([],[])
>>> a[0].append(1) # 1
>>> a
([1], [])
>>> a[0] += [2]
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
a[0] += [2]
TypeError: 'tuple' object does not support item assignment # 2
>>> a
([1, 2], []) # 3
>>>
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1成功地改变了它的价值.为什么?(我知道我真的不懂python不变性......)1被接受,那么2加薪的原因是TypeError什么?3,a得到修改,然后提出一个点是TypeError什么?谢谢
我正在尝试修改元组中的列表,该append方法有效,而+=运算符工作但引发异常,说无法修改元组.我知道一个元组是不可变的,但我不是想改变它.为什么会这样?
In [36]: t=([1,2],)
In [37]: t[0].append(123)
In [38]: t
Out[38]: ([1, 2, 123],)
In [39]: t[0]+=[4,5,]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-39-b5b3001fbe03> in <module>()
----> 1 t[0]+=[4,5,]
TypeError: 'tuple' object does not support item assignment
In [40]: t
Out[40]: ([1, 2, 123, 4, 5],)
Run Code Online (Sandbox Code Playgroud)