元组编写为一系列对象,用逗号隔开,用括号括起来。与列表类似,但不支持原处修改。
虽然元组不支持任何方法调用,但元组具有列表的大多数属性:
任意对象的有序集合
通过偏移存取
不可变序列类型
固定长度,异构,任意嵌套
对象引用的数组:与列表相似,元组最好看做是对象引用的数组。元组存储指向其他对象的存取点(引用),并且对元组进行索引操作的速度相当较快。
(,) | 空元组 |
T = (0,) | 单个元素元组 |
T = (0, 'Ni', 1.2, 3) | |
T = 0, 'Ni', 1.2, 3 | 与上行相同 |
T = ('abc', ('def', 'ghi')) | 嵌套元组 |
T = tuple('spam') | |
T[i] | |
T[i][j] | |
T[i:j] | |
len(T) | |
T1+T2 | 合并,生成新元组 |
T*3 | 重复,生成新元组 |
for x in T: print(x) | |
'spam' in T | |
[x**2 for x in T] | |
T.index('Ni') | |
T.count('Ni') | 计数 |
sorted/T)得到一个排序好的新的元组,sorted是通用的内置函数,接受任何序列对象。
注意元组的不可变性值适用于元组本身顶层而并非其内容:
>>> T = (1, [2,3], 4)
>>> T[1] = 'spam'
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
T[1] = 'spam'
TypeError: 'tuple' object does not support item assignment
>>> T[1][0] = 'spam'
>>> T
(1, ['spam', 3], 4)
为什么有了列表还要元组?
元组的不可变性提供了某种完整性。元组可以确保在程序中不会被另一个引用修改,而列表就没有这种保证。
Learning Python, Fourth Edition, by Mark Lutz.