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