![Python大学实用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/611/35537611/b_35537611.jpg)
3.5 元组
元组(tuple)跟列表很相似,从外表看它们的差别就在于[]和()——列表是用方括号包裹,元组是用圆括号包裹。但就是这点不大的差别,让元组这个Python的内置对象有了它的独特之处。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_190.jpg?sign=1738935304-yu0Xvqae0IgTc4Ar364qEWIXMstPsF1L-0-a7cf7f83d4cfb3cfcc39e262d9b22593)
这些都是创建元组的方法。从这些所创建的元组可以总结为:元组是用圆括号括起来的,其中的元素之间用逗号(英文状态)隔开。元组中的元素是任意类型的Python对象。
值得注意的是,如果定义的元组中只有一个元素,需要这样做:
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_191.jpg?sign=1738935304-yXzA25f5vQqD0NDJfXtukX7BX84l63Eo-0-957ad64293d95bbc1426760466fb1b8d)
元组和列表、字符串一样,同属于序列,因此它具有序列的所有特点。
每个元素都对应着自己的索引,并可以切片。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_192.jpg?sign=1738935304-rLvHArvghRAoFIdoYTG47MuxGFIF5FXa-0-f70d4febe614bd3e05d6e51ee58295fb)
序列的基本操作,对于元组也是成立的。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_193.jpg?sign=1738935304-Xnf5GV7amEXRkN90MDsFfXFnm0t2BNyY-0-366c0f37641294942a79d0a4bf23948c)
元组的这些操作与列表完全一致。有不一样的地方吗?
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_194.jpg?sign=1738935304-2H5pPoymqPq2AmbmkQSjfLeP1oV3Z6mH-0-eeea51acf66996d71ee9305f386e32fd)
这就显示了元组和列表的最大差别。列表可以通过索引修改某个元素,但是元组不能如此操作,这说明元组是不可修改的,这个特点类似字符串。
用dir函数查看元组的属性和方法,会看到:
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_195.jpg?sign=1738935304-Xm0EdNEXp8GrwCyOtq9vpNo31r5UqM5O-0-f6a5e6c4095d4a76de199b35af7a78a0)
所有在列表中可以修改列表的方法,在元组中都不存在了,因为元组不可修改。虽然如此,如果要修改元组,怎么办?
用list函数和tuple函数能够实现列表和元组之间的转化。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_196.jpg?sign=1738935304-nGHbXA7B0PNX0DyreU1B4O1CuACBR4Vk-0-d09c14dfe6b94394d9e3b2a769fce4b5)
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_197.jpg?sign=1738935304-DBZbzUois5mnh9eZy2moYFbcgon7urRG-0-4a8767e0b4b9ab8aece5b61e735bb080)
所以,可以先把元组转化为列表,然后进行修改。
读者可能很怀疑元组这种对象的应用场景,既然它与列表有那么多相似处,为什么还要用它呢?
一般认为,元组有如下使用情景:
❖ 元组比列表操作速度快。如果定义了一个值,并且唯一要用它做的是不断地遍历它,那么请使用元组代替列表。
❖ 如果对不需要修改的数据进行“写保护”,即该数据是常量,那么此时使用元组。如果必须改变这些值,则可以转换为列表修改。
❖ 元组可以在字典(又一种对象类型,详见3.6节)中被用作key,但是列表不可以。字典的key必须是不可变的。元组本身就是不可改变的,而列表是可变的。
所以,元组自有其用武之地,既然已经存在于Python中,必然有其合理性。