簡(jiǎn)單了解python列表和元組的區(qū)別
列表(list)和元組(tuple)的一些基礎(chǔ)
list和tuple都是一個(gè)可以放置任意數(shù)據(jù)類型的有序集合,都是既可以存放數(shù)字、字符串、對(duì)象等

list和tuple都支持負(fù)索引
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的一些區(qū)別
列表是動(dòng)態(tài)的,長(zhǎng)度大小不固定,可以隨意的增加、刪除、修改元素元組是靜態(tài)的,長(zhǎng)度在初始化的時(shí)候就已經(jīng)確定不能更改,更無法增加、刪除、修改元素

從圖中看出我們對(duì)list做出修改是成功的,但是對(duì)tuple修改的時(shí)候,確拋出了錯(cuò)誤,那如果想對(duì)tuple做出改變?cè)撊绾巫瞿??只能重新開辟一塊內(nèi)存,重新生成新到的tuple了。

從tuple的源碼中也可以看出,只有兩個(gè)自帶的方法,一個(gè)是統(tǒng)計(jì)元素出現(xiàn)的次數(shù)一個(gè)是查詢?cè)氐乃饕?/p>
list和tuple存儲(chǔ)方式的差異
我們先來看個(gè)例子
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
這里構(gòu)造了一個(gè)list和一個(gè)tuple。他們存儲(chǔ)的內(nèi)容是相同的,__sizeof__方法可以打印系統(tǒng)分配空間的大小??梢钥吹剿麄兯加玫膬?nèi)存空間是不同的,存儲(chǔ)的內(nèi)容相同,但是list比tuple多占用了16自己的內(nèi)存。
先來看一下一個(gè)數(shù)組的內(nèi)存分配過程:
In [23]: l=[]
In [24]: l.__sizeof__() // 空列表分配了40字節(jié)的內(nèi)存
Out[24]: 40
In [25]: l.append('a') // 增加了一個(gè)一個(gè)元素后,給列表分配了72字節(jié)的內(nèi)存,一個(gè)字符8個(gè)字節(jié)
// 那就是一次性分配了4個(gè)字符的內(nèi)存空間
In [26]: l.__sizeof__()
Out[26]: 72
In [27]: l.append('b') // 再增加字符,占用內(nèi)存不變
In [28]: l.__sizeof__()
Out[28]: 72
In [29]: l.append('c') // 再增加字符,占用內(nèi)存不變
In [30]: l.__sizeof__()
Out[30]: 72
In [31]: l.append('d') // 再增加字符,占用內(nèi)存不變
In [32]: l.__sizeof__()
Out[32]: 72
In [33]: l.append('e') // 再添加元素,內(nèi)存不夠,觸發(fā)重新的內(nèi)存分配
In [34]: l.__sizeof__()
Out[34]: 104
可以看出list為了能夠?qū)崟r(shí)追蹤內(nèi)存的使用情況,當(dāng)空間不足時(shí)以及分配額外空間,額外的多分配了內(nèi)存,而且還需要存儲(chǔ)指針,指向?qū)?yīng)的元素。
我們可以看到,為了減小每次增加 / 刪減操作時(shí)空間分配的開銷,Python 每次分配空間時(shí)都會(huì)額外多分配一些,這樣的機(jī)制(over-allocating)保證了其操作的高效性:增加 / 刪除的時(shí)間復(fù)雜度均為 O(1)。但是對(duì)于元組,情況就不同了。元組長(zhǎng)度大小固定,元素不可變,所以存儲(chǔ)空間固定。
所以說在存儲(chǔ)大量的數(shù)據(jù)的時(shí)候,這種差異是需要考慮的,如果數(shù)據(jù)發(fā)生變更的可能性不大,就用元組存儲(chǔ),如果數(shù)據(jù)是需要頻繁的進(jìn)行數(shù)據(jù)的修改增加,就使用列表
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python中的元組與列表及元組的更改
- python中列表(list)和元組(tuple)的深入講解
- python 元組和列表的區(qū)別
- python中讀入二維csv格式的表格方法詳解(以元組/列表形式表示)
- python判斷變量是否為int、字符串、列表、元組、字典的方法詳解
- 在Python中字符串、列表、元組、字典之間的相互轉(zhuǎn)換
- Python 字符串、列表、元組的截取與切片操作示例
- Python 輸出時(shí)去掉列表元組外面的方括號(hào)與圓括號(hào)的方法
- Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法分析
- Python中列表與元組的乘法操作示例
- python中的列表和元組實(shí)例詳解
相關(guān)文章
python實(shí)現(xiàn)對(duì)文件進(jìn)行MD5校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了如何使用python對(duì)文件進(jìn)行MD5校驗(yàn)并比對(duì)文件重復(fù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
Python中shapefile轉(zhuǎn)換geojson的示例
今天小編就為大家分享一篇關(guān)于Python中shapefile轉(zhuǎn)換geojson的示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
python 等差數(shù)列末項(xiàng)計(jì)算方式
這篇文章主要介紹了python 等差數(shù)列末項(xiàng)計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
用python獲取txt文件中關(guān)鍵字的數(shù)量
這篇文章主要介紹了如何用python獲取txt文件中關(guān)鍵字的數(shù)量,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
Python彩色化Linux的命令行終端界面的代碼實(shí)例分享
美化Linux的terminal終端顯示的方法多種多樣,這里我們給出一個(gè)利用Python彩色化Linux的命令行終端界面的代碼實(shí)例分享,包括一個(gè)Linux下簡(jiǎn)便執(zhí)行Python程序的方法,需要的朋友可以參考下2016-07-07

