2.2.1 元组的操作

看起来,元组和列表的区别就是元组用圆括号,列表用方括号。但是其实它们有本质的差异:元组一旦定义完成,就不能再更改了。

“这是真的吗?”格兰特蕾妮有点半信半疑,“那就是说列表中那些凡是会更改列表或元素的操作,对元组都是无效的吗?”说着,她输入以下代码,想看个究竟:


>>> congming
('聪明药丸', 20, 'GA97星球')
>>> congming[1]=30                    #试图改变元组元素
Traceback (most recent call last):
    File "<pyshell#1>", line 1, in <module>
        congming[1]=30                #试图改变元组元素
TypeError: 'tuple' object does not support item assignment

格兰特蕾妮试图改变congming这个元组中的元素,结果IDLE告诉她:“元组(tuple)不支持给元素赋值。”她又尝试给元组增加一个元素:


>>> congming.append('说明: 可以让人更聪明')     #试图增加元组元素
Traceback (most recent call last):
    File "<pyshell#2>", line 1, in <module>
        congming.append('说明: 可以让人更聪明')     #试图增加元组元素
AttributeError: 'tuple' object has no attribute 'append'

结果IDLE又告诉她:“元组没有append方法。”格兰特蕾妮又尝试清空一个元组:


>>> congming.clear()
Traceback (most recent call last):
    File "<pyshell#3>", line 1, in <module>
        congming.clear()
AttributeError: 'tuple' object has no attribute 'clear'

毫无疑问也报错。

“看来元组确实是无法改变的。”这下格兰特蕾妮终于服了,不过她又问,“那么那些不改变列表的功能,元组就会有吗?”

“你说得对!确实是这样!”西西船长回答道。格兰特蕾妮又输入以下代码:


>>> (1,2,3)+(4,5,6)
(1, 2, 3, 4, 5, 6)
>>> (1,2,3)*3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> x=(1,2,3)*3
>>> x.count(2)
3
>>> congming.index(20)
1

两个元组“相加”会组成一个更长的元组,而原来的元组都不会改变。元组“乘以”一个整数n,会产生一个重复n次的新元组,而原来的元组不会改变。使用“count(元素)”可以计算该元素在元组中的个数。使用“index(元素)”可以查出该元素在元组中的第一个下标。