![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=1739305930-sZSI7cOiytrCXysxYZWNcKKA94CFfIhE-0-097a35446e84725b8cc8a451571f77a7)
这些都是创建元组的方法。从这些所创建的元组可以总结为:元组是用圆括号括起来的,其中的元素之间用逗号(英文状态)隔开。元组中的元素是任意类型的Python对象。
值得注意的是,如果定义的元组中只有一个元素,需要这样做:
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_191.jpg?sign=1739305930-p7VsDf20wulEljVouQkxhDe6vu1KscRX-0-9c94a0744c4b1686baecec67cc68ae4e)
元组和列表、字符串一样,同属于序列,因此它具有序列的所有特点。
每个元素都对应着自己的索引,并可以切片。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_192.jpg?sign=1739305930-gB46odiEAVIRipByCxZobaK9kofOy8Bi-0-01a773875492c4c41c6613024d986543)
序列的基本操作,对于元组也是成立的。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_193.jpg?sign=1739305930-B5KrxhZqprfwQV2ORWteg1SVKn9dwsZV-0-e0ccbeabc11fd90eed3ffa16f09fb371)
元组的这些操作与列表完全一致。有不一样的地方吗?
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_194.jpg?sign=1739305930-qqHM5Q7MCP2r3evAUdwdzxkVxWVZflDm-0-0ef37ab87032c2fe021aa233a492f61f)
这就显示了元组和列表的最大差别。列表可以通过索引修改某个元素,但是元组不能如此操作,这说明元组是不可修改的,这个特点类似字符串。
用dir函数查看元组的属性和方法,会看到:
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_195.jpg?sign=1739305930-uCuFMwQDnMqtkoreijBhRwC0iL1QQidN-0-d0da28e6ec1a20383424dd082d1fb915)
所有在列表中可以修改列表的方法,在元组中都不存在了,因为元组不可修改。虽然如此,如果要修改元组,怎么办?
用list函数和tuple函数能够实现列表和元组之间的转化。
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_196.jpg?sign=1739305930-Fw7zjQL6EHFh3V2gMjkz5Zc95d8w0smg-0-2a3a224038e096f154a3e3eea0b24ff9)
![img](https://epubservercos.yuewen.com/451E29/18978713308549606/epubprivate/OEBPS/Images/txt003_197.jpg?sign=1739305930-NHJ0LEixGZqb3dvMjoawMcMNrKnliEAd-0-9d9d104b7faae25df428d67dac8b25e2)
所以,可以先把元组转化为列表,然后进行修改。
读者可能很怀疑元组这种对象的应用场景,既然它与列表有那么多相似处,为什么还要用它呢?
一般认为,元组有如下使用情景:
❖ 元组比列表操作速度快。如果定义了一个值,并且唯一要用它做的是不断地遍历它,那么请使用元组代替列表。
❖ 如果对不需要修改的数据进行“写保护”,即该数据是常量,那么此时使用元组。如果必须改变这些值,则可以转换为列表修改。
❖ 元组可以在字典(又一种对象类型,详见3.6节)中被用作key,但是列表不可以。字典的key必须是不可变的。元组本身就是不可改变的,而列表是可变的。
所以,元组自有其用武之地,既然已经存在于Python中,必然有其合理性。