一、前言
在Python數據類型中有兩個對象:元組 tuple 和列表 list 。二者寫法和用法十分相似,有的同學就會去網上查找它們之間的區別,查到的無非以下幾種說法:
list 是可變的,元組 tuple 是不可變的。
由於 tuple 不可變,所以使用 tuple 可以使代碼更安全。等等 ...
但是 tuple 究竟有什麼用呢,到頭來還是不知道。
二、元組
其實在很多比較「資深」的程式語言裡一開始都是沒有元組的,比如:Java、C++、C# 等,但是由於元組的靈活和便捷性,最後這些程式語言也都紛紛加上了。並且很多年輕的程式語言 Python、Scala 等,一開始就內置了元組類型。之所以元組這麼受歡迎,其實最關鍵的一點是它的語法的靈活和便捷性,提高了編程體驗。其中最大的一個特性就是使函數可以返回多個值,這個特性很常用。
1. 函數返回多個值
函數是可以返回多個值的。如:
這裡的結果就是一個返回坐標值(x , y)的函數,我們同時獲取了多個值 x 和 y 。
那麼,這和元組有什麼關係呢?
其實這裡存在一個假象,Python函數返回的值本質上還是一個單值,看下面代碼:
從列印結果來看,這裡的返回值就是一個元組。因為在語法上返回一個tuple是可以省略括號的,而多個變量可以同時接收一個tuple,按位置賦給對應的值。所以,當Python的函數返回多個值時,其實就是返回一個tuple類型的結果。有沒有覺得 tuple 使結果的獲取更簡單了呢?
2. tuple 不可變的好處
相對於 list 而言,tuple 是不可變的。這使得它可以作為字典的 key,或者扔進 set 集合裡,而 list 則不行。
tuple 放棄了對元素的增刪(內存結構設計上變的更精簡),換取的是性能上的提升:創建 tuple 比 list 要快,存儲空間比 list 佔用更小。從而也就出現了「能用 tuple 的地方就不用 list」的說法。
多線程並發的時候,tuple 是不需要加鎖的,不用擔心安全問題,編寫也簡單多了。
元組可以被修改嗎?
1、創建和訪問一個元組如果創建一個空元組,直接使用小括號即可;
如果要創建的元組中只有一個元素,要在它的後面加上一個逗號『,』。
元組裡只有一個元素的時候,逗號非常重要。
2、修改和刪除元組
直接在同一個元組上修改是不可行的,但是可以通過拷貝現有的元組片段構造一個新的元組的方式解決。
通過分片的方法讓元組拆分成兩部分,然後再使用連接符(+)合併成一個新元組,最後將原來的變量名(temp)指向連接好的新元組。在這裡就要注意了,逗號和小括號都是必須的。
刪除元組中的元素:對於元組是不可變的這一點來說,單獨刪除一個元素是不可能的。但是,我們可以利用切片的方式更新元組,間接的刪除掉一個元素。
平時很少用del去刪除整個元組,因為Python的回收機制會在這個元組不再被使用的時候自動刪除。
最後,in 和 not in 也可以直接用在元組上,跟列表是一樣的。