Python元組是什麼

2021-09-29 21:09:13 字數 2988 閱讀 8176

在使用python過程中,列表、集合和字典是比較常用的資料結構。

但是,python中有乙個特立獨行的物件,元組tuple,看乙個元組的簡單使用:

tu = (2, 3)

a = tu[0] # a=2

b = tu[1] # b=3

什麼?你告訴我這個乙個新的結構?不是陣列???

這用起來跟陣列也沒什麼區別啊?

要看元組和陣列的區別,最直觀的比較,就是比較兩個結構的方法,通過方法來理解結果。

列表用的比較多了,方法基本上都是常規的陣列操作:對陣列的增刪改查。對了,還有python列表最屌的操作,陣列的切片操作。

(悄悄告訴你,檢視方法只要python執行help(list), 就可以了)

再看一下元組的方法,暴露出來的方法只有兩個,countindex

恩,我知道區別了,元組只能查,不能做增刪改的操作。

只能查詢,不可修改,這不是常量麼。。。。既然是常量,想必虛擬機器內部會做優化,元組占用的空間會比列表少很多吧。

分別定義列表和元組,檢視其記憶體占用情況:

from sys import getsizeof

​if __name__ == '__main__':

tu = (x for x in range(20000))

li = [x for x in range(20000)]

print(getsizeof(tu))

print(getsizeof(li))

輸出結果:

啥?元組這麼小麼?我兩萬個數字才占用88個位元組?我不服,再怎麼優化這也不可能,它不是元組:

哦哦,不好意思啊,走錯片場了,這是個生成器。重新來過:

這回沒毛病了,元組確實比列表占用空間要少一些。

至此,基本已經確定了,元組最大的特性就是不可變。

通過元組的不可變特性,引申出了很多陣列無法實現的功能

這裡,看到網上有人說元組中的陣列是可變的,也給出了對應的解釋。簡單說,元組中儲存的是陣列的位址,儘管陣列內容變了,但位址沒有變,也就是元組內容沒有發生變化,很好理解。

元組是可以計算hash值的,這也就意味元組可以當做hashtable中的key存在

if __name__ == '__main__':

tu = tuple(x for x in range(20000))

li = list(x for x in range(20000))

print(hash(tu))

print(hash(li))

有人說,字串就足夠了,沒必要用元組。恩?我想到乙個應用場景:

如果要通過使用者的資訊(身高,體重,性別)來查詢使用者的id,我們固然可以遍歷一遍使用者,將符合條件的篩選出來。但這樣太慢了,如果我們維護乙個使用者資訊為key,值為id陣列的hashmap,那查詢就十份快速了。

當然,使用字串也完全可以滿足,將使用者的各種資訊拼接起來,但使用元組顯然更加直觀,key直接就是(身高,體重,性別)。

這個雖然和元組的不可變沒什麼關聯,但同樣十分實用。實現函式返回多個值。

def test_fun():

return 2, 3

​if __name__ == '__main__':

a, b = test_fun()

# 用*來接受剩餘的內容

媽媽再也不用擔心我的函式返回了。

通過先人的成果來理解列表和元組,下面以numpy為例,通過作者對二者的理解來幫助我理解。

import numpy

​if __name__ == '__main__':

# 建立乙個二維陣列

a = numpy.arange(9).reshape(3, 3)

print(a)

tu = (1, 2)

li = [1, 2]

print(a[tu])

print(a[li])

python 元組是什麼 python元組是什麼

python的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。如下例項 tup1 physics chemistry 1997,2000 tup2 1,2,3,4,5 tup3 a b c d 建立空元祖tu...

python教程是什麼 Python是什麼?

python是物件導向,高階語言,解釋,動態和多用途程式語言。python易於學習,而且功能強大,功能多樣的指令碼語言使其對應用程式開發具有吸引力。python的語法和動態型別具有其解釋性質,使其成為許多領域的指令碼編寫和快速應用程式開發的理想語言。python支援多種程式設計模式,包括物件導向程式...

python是什麼意思 python是什麼

python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...