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

时间:2013-12-14 14:40:00

标签: python tuples

我在SO上发现了一些询问TypeError: 'tuple' object does not support item assignment的问题,但我仍然对此感到困惑:

考虑代码段:

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

我的问题是:

  1. 元组是不可变的,但是1成功地改变了它的价值。为什么?(我知道我真的不懂python不变性......)
  2. 如果1被接受,2加注TypeError的原因是什么?
  3. 3a被修改,那么提出TypeError的重点是什么?
  4. 谢谢

1 个答案:

答案 0 :(得分:0)

这是因为元组是不可变的,但它可以包含可变数据类型(在你的情况下是 list )作为元素。

你的元组a = ([], [])是一个列表元组。这就是为什么你能够将数据附加到[0] - 这是一个列表。

在此:

a[0] += 2 

您试图更改引发异常TypeError的元组值(由于使用了'='赋值运算符)

三,由于使用'+'运算符,列表被连接起来。