相关疑难解决方法(0)

附加到元组中定义的列表 - 这是一个错误吗?

所以我有这个代码:

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)

这种行为有望吗?

注意

我意识到这不是一个非常常见的用例.但是,虽然预计会出现错误,但我没想到列表会发生变化.

python tuples list

37
推荐指数
3
解决办法
2027
查看次数

令人费解的"'元组'对象不支持项目分配"错误

考虑以下:

>>> 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中的项目不是元组! (事实上​​,预期的分配成功,尽管有错误信息,但整个场景只会更奇怪.)

为什么这种行为不被视为错误?

python

11
推荐指数
1
解决办法
1248
查看次数

不可变容器内的可变类型

我对修改元组成员有点困惑.以下不起作用:

>>> 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)

那么,当你能够并且不能修改元组内的某些内容时,游戏的规则到底是什么?它似乎更像禁止使用赋值成员的赋值运算符,但最后两个案例让我感到困惑.

python tuples list mutable immutability

10
推荐指数
2
解决办法
593
查看次数

python tuple,有人可以解释这种行为吗?

我发现了一些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. 元组是不可变的,但1成功地改变了它的价值.为什么?(我知道我真的不懂python不变性......)
  2. 如果1被接受,那么2加薪的原因是TypeError什么?
  3. 3,a得到修改,然后提出一个点是TypeError什么?

谢谢

python tuples

5
推荐指数
1
解决办法
164
查看次数

获取"'元组'对象的列表的变量元组不支持项目分配"

我正在尝试修改元组中的列表,该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)

python tuples list immutability

3
推荐指数
1
解决办法
710
查看次数

标签 统计

python ×5

tuples ×4

list ×3

immutability ×2

mutable ×1