欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單了解python列表和元組的區(qū)別

 更新時(shí)間:2020年05月14日 10:33:39   作者:測(cè)試軒  
這篇文章主要介紹了簡(jiǎn)單了解python列表和元組的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

列表(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn)

    python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn)

    Unix時(shí)間戳是一種常見的時(shí)間表示方式,本文主要介紹了python unix時(shí)間戳轉(zhuǎn)換毫秒的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 提升Python Scrapy庫(kù)數(shù)據(jù)采集速度實(shí)現(xiàn)高效爬蟲

    提升Python Scrapy庫(kù)數(shù)據(jù)采集速度實(shí)現(xiàn)高效爬蟲

    Scrapy是一個(gè)強(qiáng)大而靈活的Python爬蟲框架,被廣泛用于數(shù)據(jù)采集、網(wǎng)站抓取和網(wǎng)絡(luò)爬蟲開發(fā),本文將深入介紹Scrapy的功能和用法,并提供豐富的示例代碼,幫助更好地理解和應(yīng)用
    2023-11-11
  • Python中關(guān)于print和return的區(qū)別

    Python中關(guān)于print和return的區(qū)別

    這篇文章主要介紹了Python中關(guān)于print和return的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python中numpy數(shù)組的維度增減方法詳解

    Python中numpy數(shù)組的維度增減方法詳解

    這篇文章主要介紹了Python中numpy數(shù)組的維度增減方法詳解,在操作數(shù)組情況下,需要按照某個(gè)軸將不同數(shù)組的維度對(duì)齊,這時(shí)候需要為數(shù)組添加維度(特別是將二維數(shù)組變成高維張量的情況下),numpy提供了expand_dims()函數(shù)來為數(shù)組增加維度,需要的朋友可以參考下
    2023-09-09
  • Python實(shí)現(xiàn)的密碼強(qiáng)度檢測(cè)器示例

    Python實(shí)現(xiàn)的密碼強(qiáng)度檢測(cè)器示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的密碼強(qiáng)度檢測(cè)器,結(jié)合實(shí)例形式分析了Python密碼強(qiáng)度檢測(cè)的原理與實(shí)現(xiàn)方法,涉及Python字符串運(yùn)算與轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • 如何在Django項(xiàng)目中引入靜態(tài)文件

    如何在Django項(xiàng)目中引入靜態(tài)文件

    這篇文章主要介紹了如何在Django項(xiàng)目中引入靜態(tài)文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python爬取某網(wǎng)站原圖作為壁紙

    python爬取某網(wǎng)站原圖作為壁紙

    之前已經(jīng)爬取過網(wǎng)站上的圖片,貌似很簡(jiǎn)單可是他喵的都像馬賽克一樣,怎么能用做壁紙呢通過多重審查發(fā)現(xiàn),原圖地址藏在更深的地方 所以,來爬一下原圖吧,需要的朋友可以參考下
    2021-06-06
  • Python 處理表格進(jìn)行成績(jī)排序的操作代碼

    Python 處理表格進(jìn)行成績(jī)排序的操作代碼

    這篇文章主要介紹了Python 處理表格進(jìn)行成績(jī)排序,也就是說將學(xué)生從按照學(xué)號(hào)排序變?yōu)榘凑粘煽?jī)從高到低進(jìn)行排序,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧
    2021-07-07
  • Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    這篇文章主要為大家介紹了OpenCV中的幾個(gè)形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下
    2022-04-04
  • Python實(shí)現(xiàn)批量生成,重命名和刪除word文件

    Python實(shí)現(xiàn)批量生成,重命名和刪除word文件

    這篇文章主要為大家詳細(xì)介紹了Python如何利用第三方庫(kù)實(shí)現(xiàn)批量生成、重命名和刪除word文件的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-03-03

最新評(píng)論