簡單了解python列表和元組的區別

2022-09-26 18:51:15 字數 2060 閱讀 2405

列表(list)和元組(tuple)的一些基礎

list和tuple都是乙個可以放置任意資料型別的有序集合,都是既可以存放數字、字串、物件等

list和tuple都支援負索引

in [8]: nums[-2]

out[8]: 'ad'

in [9]: tp[-2]

out[9]: '33'

list和tuple都支援切片操作

in [10]: nums[1:3]

out[10]: [3, 'ad']

in [11]: tp[1:3]

out[11]: (3, '33')

list和tuple都可以隨意巢狀

in [12]: nums = [[1,2,3],['s','ff'],['34',3,5]]

in [13]: tp = ((23,4,'f'),45,'d',('dd',4,'ff'))

list和tuple的一些區別

列表是動態的,長度大小不固定,可以隨意的增加、刪除、修改元素元組是靜態的,長度在初始化的時候就已經確定不能更改,更無法增加、刪除、修改元素

從圖中看出我們對list做出修改是成功的,但是對tuple修改的時候,確丟擲了錯誤,那如果想對tuple做出改變該如何做呢?只能重新開闢一塊記憶體,重新生成新到的tuple了。

從tuple的原始碼中也可以看出,只有兩個自帶的方法,乙個是統計元素出現的次數乙個是查詢元素的索引。

list和tuple儲存方式的差異

我們先來看個例子

in [19]: nums=['a',1,2]

in [20]: tp=('a',1,2)

in [21]: nums.__sizeof__()

out[21]: 64

in [22]: tp.__sizeof__()

out[22]: 48

這裡構造了乙個list和乙個tuple。他們儲存的內容是相同的,__sizeof__方法可以列印系統分配空間的大小。可以看到他們所占用的記憶體空間是不同的,儲存的內容相同,但是list比tuple多占用了16自己的記憶體。

先來看一下乙個陣列的記憶體分配過程:

in [23]: l=

in [24]: l.__sizeof__() // 空列表分配了40位元組的記憶體

out[24]: 40

in [25]: l.append('a') // 增加了乙個乙個元素後,給列表分配了72位元組的記憶體,乙個字元8個位元組

// 那就是一次性分配了4個字元的記憶體空間

in [26]: l.__sizeof__()

out[26]: 72

in [27]: l.append('b') // 再增加字元,占用記憶體不變

in [28]: l.__sizeof__()

out[28]: 72

in [29]: l.append('c') // 再增加字元,占用記憶體不變

in [30]: l.__sizeof__()

out[30]: 72

in [31]: l.append('d') // 再增加程式設計客棧字元,占用記憶體不變

in [32]: l.__sizeof__()

out[32]: 72

in [33]: l.append('e') // 再新增元素,記憶體不夠,觸發重新的記憶體分配

in [34]: l.__sizeof__()

out[34]: 104

可以看出list為了能夠實時追蹤記憶體的使用情況,當空間不足時以及分配額外空間,額外的多分配了記憶體,而且還需要儲存指標,指向對應的元素。

我程式設計客棧們可以看到,為了減小每次增加 / 刪減操作時空間分配的開銷,python 每次分配空間時都會額外多分配一些,這樣的機制(over-allocyefugaating)保證了其程式設計客棧操作的高效性:增加 / 刪除的時間複雜度均為 o(1)。但是對於元組,情況就不同了。元組長度大小固定,元素不可變,所以程式設計客棧儲存空間固定。

所以說在儲存大量的資料的時候,這種差異是需要考慮的,如果資料發生變更的可能性不大,就用元組儲存,如果資料是需要頻繁的進行資料的修改增加,就使用列表

本文標題: 簡單了解python列表和元組的區別

本文位址:

Python列表和元組

序列可修改,而元組不能。eda edward 42 序列可包含其它列表 edward edward 43 john john 44 database edward,john database edward 43 john 44 序列的分片 nubs range 10 nubs 0,1,2,3,4,5...

python 列表和元組

資料結構 資料結構是以某種方式組合起來的資料元素。在python中最基本的資料結構為序列,序列中的每個元素都有編號,就像學號,可以通過學號找到你本人。不同的序列中的編號一般都是從0開始。序列包括元組和列表,另外還有字典。列表和元組的區別 列表是可以修改的,而元組不可以。在處理資料要特別注意這一點,但...

Python 列表和元組

1 序列是python中最基本的資料結構。列中的每個元素都分配乙個數字,該數字代表了該元素的位置或索引,從0開始依次類推。2 python中常見的序列有列表 元組和字串。3 序列可以進行的操作有索引 切片 加 乘檢查成員。python中已經內建了確定序列長度以及確定最大和最小元素的方法。4 序列是最...