1.9. 元组101

元组是不可变列表。一旦创建了一个元组就不能以任何方式改变它。

例 1.22. 定义元组

>>> t = ("a", "b", "mpilgrim", "z", "example") 1
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t[0]                                       2
'a'
>>> t[-1]                                      3
'example'
>>> t[1:3]                                     4
('b', 'mpilgrim')
1 元组的定义同列表的定义方式相同,除了整个元素集是用小括号包围的而不是方括号。
2 元组的元素象列表一样按定义的次序进行排序。序列的索引象列表一样从0开始,所以一个非空元组的第一个元素总是 t[0]
3 负数索引象列表一样从元组尾部开始计数。
4 分片也可以使用,就象列表一样。注意当分割一个列表时,会得到一个新的列表;当分割一个元组时,会得到一个新的元组。

例 1.23. 元组没有方法

>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t.append("new")    1
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> t.remove("z")      2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> t.index("example") 3
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'
>>> "z" in t           4
1
1 你不能向元组增加元素。元组没有 appendextend 方法。
2 你不能从元组中除掉元素。元组没有 remove pop 方法。
3 你不能在元组中查找元素。元组没有 index 方法。
4 然而,你可以使用 in 来看一看是否一个元素存在于元组中。

那么元组有什么好处呢?

Note
元组可以转化成列表,反之亦然。内置的 tuple 函数接收一个列表,返回一个有着相同元素的元组。而 list 函数接收一个元组,返回一个列表。从效果上看,tuple 冻结一个列表,而 list 解冻一个元组。

进一步阅读

脚注

[2] 实际上,事情要比那更复杂。字典关键字必须是不可变的。元组本身是不可改变的,但是如果你有一个列表的元组,那就认为是可变的了,并且在字典中用作关键字是不安全的。只有字符串,数字,或其它字典安全的元组才可以用作字典关键字。