日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python 對象有哪幾種,我們可以從哪些角度進行分類呢?

來源: 責編: 時間:2024-05-11 09:20:49 252觀看
導讀楔子在程序開發中,我們每時每刻都在創建對象,那到底什么是對象呢?其實一個對象就是一片被分配的內存空間,空間可以是連續的,也可以是不連續的。然后空間里面存儲了指定的數據,并提供了操作數據的一些功能方法。而按照是否可

楔子

oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

在程序開發中,我們每時每刻都在創建對象,那到底什么是對象呢?oyd28資訊網——每日最新資訊28at.com

其實一個對象就是一片被分配的內存空間,空間可以是連續的,也可以是不連續的。然后空間里面存儲了指定的數據,并提供了操作數據的一些功能方法。而按照是否可變和內存大小是否固定,我們可以將對象進行如下分類。oyd28資訊網——每日最新資訊28at.com

  • 可變對象和不可變對象;
  • 定長對象和變長對象;

下面來詳細解釋一下。oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

可變對象和不可變對象

oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

不可變對象一旦創建,其內存中存儲的值就不可以再修改了。如果想修改,只能創建一個新的對象,然后讓變量指向新的對象,所以前后的地址會發生改變。而可變對象在創建之后,其存儲的值可以動態修改。oyd28資訊網——每日最新資訊28at.com

像整數就是一個不可變對象。oyd28資訊網——每日最新資訊28at.com

>>> a = 666>>> id(a)2230564873872>>> a += 1>>> id(a)2230564873808

我們看到執行 a += 1 操作之后,前后地址發生了變化,所以整數不支持本地修改,因此是一個不可變對象;oyd28資訊網——每日最新資訊28at.com

圖片圖片oyd28資訊網——每日最新資訊28at.com

原來 a = 666,而我們說操作一個變量等于操作這個變量指向的內存,所以 a+=1 會將 a 指向的整數對象 666 和 1 進行加法運算,得到 667。因此會開辟新的空間來存儲 667,然后讓 a 指向這片新的空間。至于原來的 666 所占的空間怎么辦,解釋器會看它的引用計數,如果不為 0 代表還有變量引用(指向)它,如果為 0 證明沒有變量引用了,所以會被回收。oyd28資訊網——每日最新資訊28at.com

關于引用計數,我們后面會詳細說,目前只需要知道當一個對象被一個變量引用的時候,那么該對象的引用計數就會加 1。有幾個變量引用,那么它的引用計數就是幾。oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

除了整數之外,浮點數、字符串、布爾值等等,都是不可變對象,它們的值不能本地修改。oyd28資訊網——每日最新資訊28at.com

然后是可變對象,像列表、字典、集合等都是可變對象,它們支持動態修改。oyd28資訊網——每日最新資訊28at.com

這里先多提一句,Python 的對象本質上就是 C 中 malloc 函數為結構體實例在堆區申請的一塊內存。Python 的任何對象在 C 中都會對應一個結構體,這個結構體除了存放具體的值之外,還存放了一些額外的信息,這個我們在后續剖析內置對象的時候會細說。oyd28資訊網——每日最新資訊28at.com

在上一篇文章中我們說到,列表、元組、集合這些容器的內部存儲的不是具體的對象,而是對象的指針。比如:lst = [1, 2, 3],你以為列表存儲的是三個整數對象嗎?其實不是的,它存儲的是三個整數對象的指針,當我們使用 lst[0] 的時候,拿到的是一個指針,但是操作(比如 print)的時候會自動操作指針指向的內存。oyd28資訊網——每日最新資訊28at.com

因為 Python 底層是 C 來實現的,所以列表的實現必然要借助 C 的數組???C 數組里面的元素的類型必須一致,但列表卻可以存放任意的元素,因此從這個角度上講,列表里面的元素就不可能是對象,因為不同的對象在底層對應的結構體是不同的,所以元素只能是指針。oyd28資訊網——每日最新資訊28at.com

可能有人又好奇了,不同對象的指針也是不同的啊,是的,但 C 指針是可以轉化的。Python 底層將所有對象的指針,都轉成了 PyObject 類型的指針,這樣不就是同一種類型的指針了嗎?關于這個 PyObject,它是我們后面要剖析的重中之重,貫穿了整個系列。不過目前只需要知道列表(還有其它容器)存儲的元素、以及 Python 的變量,它們都是一個泛型指針 PyObject *。oyd28資訊網——每日最新資訊28at.com

>>> lst = [1, 2, 3]>>> id(lst)2287192570048>>> lst.append(4)>>> lst[1, 2, 3, 4]>>> id(lst)2287192570048

我們看到列表在添加元素的時候,前后地址并沒有改變。列表在 C 中是通過 PyListObject 結構體實現的,我們在介紹列表的時候會細說。這個 PyListObject 內部除了一些基本信息之外,還維護了一個 PyObject 的二級指針,指向了 PyObject * 類型的數組的首元素。oyd28資訊網——每日最新資訊28at.com

圖片圖片oyd28資訊網——每日最新資訊28at.com

顯然圖中的指針數組用來存儲具體的對象的指針,每一個指針都指向了相應的對象(這里是整數對象)。oyd28資訊網——每日最新資訊28at.com

然后我們還可以看到一個現象,那就是列表在底層是分開存儲的,因為 PyListObject 結構體實例并沒有存儲相應的指針數組,而是存儲了一個二級指針。顯然添加、刪除、修改元素等操作,都是通過這個二級指針來間接操作指針數組。oyd28資訊網——每日最新資訊28at.com

因為一個對象一旦被創建(任何語言都是如此),那么它在內存中的大小就不可以變了。所以這就意味著那些可以容納可變長度數據的可變對象,要在內部維護一個指針,指針指向一片內存區域,該區域存放具體的數據。如果空間不夠了,那就申請一片更大的內存區域,然后將元素依次拷貝過去,再讓指針指向新的內存區域。而列表的底層也是這么做的,其內部并沒有直接存儲具體的指針數組,而是存儲了指向指針數組首元素的二級指針。oyd28資訊網——每日最新資訊28at.com

那么問題來了,為什么要這么做?oyd28資訊網——每日最新資訊28at.com

其實很好理解,遵循這樣的規則可以使通過指針維護對象的工作變得非常簡單。一旦允許對象的大小可在運行期改變,那么我們就要考慮如下場景。oyd28資訊網——每日最新資訊28at.com

在內存中有對象 A,并且其后面緊跟著對象 B。如果在運行的某個時候,A 的大小增大了,這就意味著必須將 A 整個移動到內存中的其他位置,否則 A 增大的部分會覆蓋掉原本屬于 B 的數據。但要將 A 移動到內存的其他位置,那么所有指向 A 的指針就必須立即得到更新??上攵@樣的工作是多么的繁瑣,因此通過在可變對象的內部維護一個指針就變得簡單多了。oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

定長對象和變長對象

oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

所謂定長和變長,取決于對象所占的內存大小是否固定,舉個例子。oyd28資訊網——每日最新資訊28at.com

>>> import sys>>> sys.getsizeof("")41>>> sys.getsizeof("hello")46>>> sys.getsizeof("hello world")52>>> sys.getsizeof(1.0)24>>> sys.getsizeof(3.14)24>>> sys.getsizeof((2 << 30) + 3.14)24

我們看到字符串的長度不同,所占的內存也不同,像這種內存大小不固定的對象,我們稱之為變長對象;而浮點數所占的內存都是一樣的,像這種內存大小固定的對象,我們稱之為定長對象。oyd28資訊網——每日最新資訊28at.com

至于 Python 如何計算對象所占的內存,我們在剖析具體對象的時候會說,因為這涉及到底層對應的結構體。oyd28資訊網——每日最新資訊28at.com

所以變長對象的特點是:同一個類型的實例對象,如果值不同,那么占用的內存大小不同。像字符串、列表、元組、字典等,它們毫無疑問都是變長對象。值得一提的是,整數也是變長對象,因為 Python 整數的值在底層是通過數組維護的,后續介紹整數實現的時候再聊。oyd28資訊網——每日最新資訊28at.com

而定長對象的特點是:同一個類型的實例對象,不管值是多少,占用的內存大小始終是固定的,比如浮點數。因為 Python 的浮點數的值在 C 中是通過一個 double 來維護的。而 C 里面值的類型一旦確定,大小就不變了,所以 Python 浮點數的大小也是不變的。oyd28資訊網——每日最新資訊28at.com

但既然類型固定,大小固定,那么范圍肯定是有限的。所以當浮點數不斷增大,會犧牲精度來進行存儲。oyd28資訊網——每日最新資訊28at.com

圖片圖片oyd28資訊網——每日最新資訊28at.com

如果實在過大,則拋出 OverFlowError。oyd28資訊網——每日最新資訊28at.com

圖片圖片oyd28資訊網——每日最新資訊28at.com

當然除了浮點數之外,布爾值、復數等也屬于定長對象,它們占用的內存大小是固定的。oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

小結

oyd28資訊網——每日最新資訊28at.com

oyd28資訊網——每日最新資訊28at.com

以上我們就分析了對象的種類,對象可以被分為可變對象和不可變對象,以及變長對象和定長對象。oyd28資訊網——每日最新資訊28at.com

  • 不可變對象:對象不支持本地修改;
  • 可變對象:對象支持本地修改;
  • 變長對象:對象維護的值不同,占用的內存大小也不同;
  • 定長對象:占用的內存大小始終固定;

本文參考自:oyd28資訊網——每日最新資訊28at.com

  • 陳儒《Python 源碼剖析》

本文鏈接:http://m.www897cc.com/showinfo-26-87986-0.htmlPython 對象有哪幾種,我們可以從哪些角度進行分類呢?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 在Go語言中,這樣使用Json的

下一篇: 一篇文章徹底搞懂Arthas的原理,你學會了嗎?

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 石頭自清潔掃拖機器人G10S評測:多年黑科技集大成之作 懶人終極福音

    科技圈經常能看到一個詞叫“縫合怪”,用來形容那些把好多功能或者外觀結合在一起的產品,通常這樣的詞是貶義詞,但如果真的是產品縫合的好、縫合的實用的話,那它就成了中性詞,今
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 一文看懂為蘋果Vision Pro開發應用程序

    譯者 | 布加迪審校 | 重樓蘋果的Vision Pro是一款混合現實(MR)頭戴設備。Vision Pro結合了虛擬現實(VR)和增強現實(AR)的沉浸感。其高分辨率顯示屏、先進的傳感器和強大的處理能力
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 阿里瓴羊One推出背后,零售企業迎數字化新解

    作者:劉曠近年來隨著數字經濟的高速發展,各式各樣的SaaS應用服務更是層出不窮,但本質上SaaS大多局限于單一業務流層面,對用戶核心關切的增長問題等則沒有提供更好的解法。在Saa
  • 蘋果公司要求三星和LG Display生產「無邊框」OLED iPhone顯示屏

    據 The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發新的 OLED 顯示面
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲一区在线免费观看| 狠狠综合久久av一区二区小说 | 国产精品一区二区三区免费观看| 国产精品福利在线观看网址| 国产一区二区三区精品久久久| 一区视频在线| 一区二区三区日韩欧美精品| 亚洲欧美一级二级三级| 欧美中文字幕视频| 欧美成人一区在线| 国产精品日日摸夜夜摸av| 黄色一区二区在线观看| 女女同性精品视频| 欧美精品久久久久久久久久| 国产精品激情偷乱一区二区∴| 国产亚洲欧美色| 亚洲美女毛片| 欧美一区二区观看视频| 欧美国产免费| 国产精品一区二区久久国产| 激情综合色丁香一区二区| 99日韩精品| 亚洲毛片视频| 亚洲精品极品| 午夜精品久久久久久久蜜桃app| 久久久免费av| 欧美性大战久久久久久久| 精久久久久久久久久久| 亚洲午夜精品久久| 亚洲系列中文字幕| 久久久久久穴| 欧美一区影院| 欧美激情视频在线播放| 国产精品综合不卡av| 亚洲激情女人| 久久精品国产综合| 欧美香蕉视频| 亚洲美女毛片| 六月丁香综合| 国产亚洲aⅴaaaaaa毛片| 洋洋av久久久久久久一区| 久久久综合精品| 国产精品揄拍一区二区| 夜夜夜久久久| 亚洲欧美日韩国产综合精品二区| 亚洲欧美一区二区精品久久久 | 国产精品久久久久久久久免费 | 免费在线播放第一区高清av| 国产精品永久| 在线一区二区三区四区五区| 欧美sm视频| 精品成人国产| 久久不射中文字幕| 久久亚洲精品伦理| 国产精品欧美日韩一区| 亚洲精品视频在线观看网站| 久久网站免费| 国产一区二区三区直播精品电影 | 欧美视频导航| 亚洲精品视频在线| 免播放器亚洲一区| 红桃视频亚洲| 久久国产精彩视频| 欧美电影免费观看高清完整版| 国产欧美精品xxxx另类| 国产亚洲精品成人av久久ww| 在线视频精品一区| 欧美日韩不卡| 99re这里只有精品6| 欧美大片一区二区三区| 亚洲第一网站免费视频| 久久亚洲综合色| 一区二区在线不卡| 久热精品在线视频| 亚洲国产成人久久| 亚洲视频一区在线| 欧美日韩亚洲一区二区三区在线观看| 亚洲国产精品一区二区尤物区| 久久综合中文字幕| 国产精品欧美日韩久久| 亚洲桃花岛网站| 国产精品高潮呻吟久久| 亚洲一二三四区| 国产精品久久激情| 午夜精品久久久久久久99樱桃| 欧美sm视频| 亚洲国产精品一区| 欧美国产先锋| 99国产精品99久久久久久粉嫩 | 国产一区二区丝袜高跟鞋图片 | 久久精品中文字幕免费mv| 国产综合久久久久久鬼色| 99国产精品久久久久久久| 欧美在线免费一级片| 国产精品一二三视频| 欧美在线免费播放| 红桃视频一区| 欧美va天堂| 99国内精品| 国产精品日日摸夜夜摸av| 小辣椒精品导航| 激情婷婷亚洲| 欧美福利视频网站| 亚洲深夜激情| 欧美成人小视频| 99ri日韩精品视频| 国产精品久久福利| 欧美中文字幕视频| 亚洲福利视频专区| 欧美伦理91i| 亚洲欧美国产精品va在线观看| 国产欧美一区二区精品秋霞影院 | 亚洲欧洲一区二区天堂久久| 欧美日韩中文字幕综合视频| 亚洲欧美在线免费| 在线成人www免费观看视频| 欧美一级久久久| 黄色一区二区在线观看| 欧美精品v日韩精品v国产精品| 亚洲视频免费看| 国产综合色产| 欧美伦理在线观看| 校园激情久久| 亚洲国产成人av在线| 欧美日韩一区二区三| 欧美影院一区| 亚洲精品一区在线| 国产欧美日本一区二区三区| 老司机aⅴ在线精品导航| 一本色道88久久加勒比精品| 国产欧美日韩亚洲精品| 男人天堂欧美日韩| 亚洲欧美精品| 最新日韩在线| 国产日韩av一区二区| 欧美激情亚洲精品| 午夜国产一区| 亚洲精品日韩激情在线电影| 国产欧美日韩精品专区| 欧美激情bt| 欧美一区二区三区在线| 亚洲欧洲三级| 国产一区自拍视频| 欧美午夜精品理论片a级大开眼界| 日韩香蕉视频| 国产精品尤物| 欧美日韩黄色大片| 久久亚洲私人国产精品va| 中文在线资源观看网站视频免费不卡 | 在线视频国内自拍亚洲视频| 国产精品成人一区| 免费av成人在线| 午夜欧美理论片| 日韩午夜激情电影| 在线观看免费视频综合| 国产精品区一区二区三| 欧美激情在线狂野欧美精品| 久久精品一本久久99精品| 亚洲永久免费精品| 亚洲免费精彩视频| 在线电影国产精品| 国产亚洲精品激情久久| 欧美视频中文一区二区三区在线观看 | 亚洲免费影视| 亚洲黄网站黄| 国产综合久久久久影院| 国产精品不卡在线| 欧美精品久久久久久久久老牛影院| 久久精品视频免费播放| 亚洲欧美成人网| 一个色综合导航| 91久久久久久| 伊人精品视频| 国产综合色产| 国产女主播一区二区| 欧美日韩精品系列| 蜜桃久久精品乱码一区二区| 欧美在线观看www| 亚洲在线观看免费视频| 亚洲最新视频在线| 亚洲人成在线观看网站高清| 在线不卡a资源高清| 狠狠狠色丁香婷婷综合激情| 国产精品网站在线播放| 欧美性猛交xxxx免费看久久久 | 欧美日韩美女一区二区| 欧美激情第9页| 欧美不卡激情三级在线观看| 老鸭窝毛片一区二区三区| 久久深夜福利| 久久久久久一区二区| 久久精品论坛| 久久久.com| 久久九九99视频| 午夜精品免费视频| 小黄鸭视频精品导航| 欧美一区二区三区久久精品 | 欧美暴力喷水在线| 欧美黑人在线播放| 欧美精品三区| 欧美日韩一二区| 欧美性色综合| 国产精品久久久久久久午夜片| 国产精品久久久久久一区二区三区|