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