有什麼不一樣? 函數
元組/列表的優勢/缺點是什麼? spa
列表用於循環,元組用於結構,即"%s %s" %tuple
。 code
列表一般是同質的,元組一般是異類的。 對象
列表用於可變長度,元組用於固定長度。 排序
list的值能夠隨時更改,可是元組的值不能更改。 內存
優缺點取決於用途。 若是您擁有從未更改過的數據,則必須使用元組,不然list是最佳選擇。 get
有人提到 ,差別主要是語義上的:人們指望元組和列表表示不一樣的信息。 但這遠遠超出了指導原則。 有些庫實際上根據傳遞的內容而有所不一樣。 以NumPy爲例(從我要求更多示例的另外一篇文章中複製): io
>>> import numpy as np >>> a = np.arange(9).reshape(3,3) >>> a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) >>> idx = (1,1) >>> a[idx] 4 >>> idx = [1,1] >>> a[idx] array([[3, 4, 5], [3, 4, 5]])
關鍵是,儘管NumPy可能不是標準庫的一部分,但它是一個主要的 Python庫,在NumPy列表和元組中是徹底不一樣的東西。 import
列表和元組之間的區別 變量
文字
someTuple = (1,2) someList = [1,2]
尺寸
a = tuple(range(1000)) b = list(range(1000)) a.__sizeof__() # 8024 b.__sizeof__() # 9088
因爲元組操做的大小較小,所以它變得更快一些,可是在您擁有大量元素以前,沒必要多說。
容許的操做
b = [1,2] b[0] = 3 # [3, 2] a = (1,2) a[0] = 3 # Error
這也意味着您不能刪除元素或對元組進行排序。 可是,您能夠將新元素添加到列表和元組中,惟一的區別是您將經過添加元素來更改元組的ID
a = (1,2) b = [1,2] id(a) # 140230916716520 id(b) # 748527696 a += (3,) # (1, 2, 3) b += [3] # [1, 2, 3] id(a) # 140230916878160 id(b) # 748527696
用法
因爲列表是可變的,所以不能用做字典中的鍵,而可使用元組。
a = (1,2) b = [1,2] c = {a: 1} # OK c = {b: 1} # Error
可哈希的元組可哈希,而列表則不可。 哈希函數返回對象的哈希值(若是有)。
列表是可變的,元組是不可變的。 可變項和不可變項之間的主要區別是,嘗試添加項時的內存使用狀況。
建立變量時,會將一些固定內存分配給該變量。 若是是列表,則分配的內存將大於實際使用的內存。 例如,若是當前內存分配爲100字節,則當您要追加第101個字節時,可能會另外分配100個字節(在這種狀況下,總共爲200個字節)。
可是,若是您知道不常常添加新元素,則應使用元組。 元組精確分配所需的內存大小,從而節省了內存,尤爲是當您使用較大的內存塊時。