




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Python萬物皆對象理解及源碼學(xué)習(xí)目錄萬物皆對象1類型對象和實例對象2類型、對象體系2.1元類型type2.2自定義類型2.3自定義類型子類2.4type和object的關(guān)系3可變對象與不可變對象4變長對象和定長對象5補充
萬物皆對象
這篇博客的內(nèi)容主要是針對Python中萬物皆對象的理解,對Python的類型、對象體系做一個整體的梳理。
在Python中,一切皆為對象,一個整數(shù)是一個對象,一個字符串也是一個對象,基本類型(如int)也是對象。Python不再區(qū)別對待基本類型和對象,所有的基本類型內(nèi)部均由對象實現(xiàn)。
a=int
b=1
id(a)
140734789683952
id(int)
140734789683952
class'int'
id(b)
2421963817200
id(1)
2421963817200
1類型對象和實例對象
Python中的類型是一種對象,稱為類型對象。整數(shù)類型、字符串類型,以及我們通過class關(guān)鍵字定義的自定義類型也是一個對象。
通過類實例化可以得到一個實例化對象,稱為實例對象
2類型、對象體系
2.1元類型type
前面我們提到:Python中的類型是一種對象,稱為類型對象。那么類型對象的類型又是什么呢?
type(int)
class'type'
int.__class__
class'type'
可以看到,類型的類型是type,我們稱之為元類型,但是這個類型比較特殊,它的實例對象是類型對象。此外,Python中還有一個特殊的類型object,所有其他類型都繼承于object,即object是所有類型的基類。
圖示如下:
2.2自定義類型
除了Python的內(nèi)置類型,我們自定義一個類型MyClass,同樣地,可以得到:
2.3自定義類型子類
再定義一個類型MySubClass,該類型為MyClass的子類:
2.4type和object的關(guān)系
在上述示例中,我們描述了不同對象、類型之間的繼承、類型關(guān)系,但是對于兩個特殊的類型type和object的關(guān)系并沒有指出,我們先來打印看一下:
type(type)
class'type'
type(object)
class'type'
type.__base__
class'object'
object.__base__
print(object.__base__)
可以看到:object的類型也是type,type本身的類型也是type;而type的父類也是所有對象的父類object,而object本身沒有父類。由此我們可以歸納出:
object是所有類型的基類(除了它自己),本質(zhì)上是一種類型,其類型是type,同時也是type的基類;
type是所有類型的類型,本質(zhì)上是一種類型,其類型是它自己,也是object的類型;
注:object本身不能有基類,這是因為對于存在繼承關(guān)系的類,成員屬性和成員方法查找需要回溯繼承鏈,不斷查找基類。因此,繼承鏈必須有一個終點,不然就會死循環(huán)。
最后我們把type和object的關(guān)系補充進(jìn)來:
3可變對象與不可變對象
可變對象在創(chuàng)建之后,其值可以修改;不可變對象在創(chuàng)建之后,其值不可以進(jìn)行修改。
以Python中的整數(shù)對象為例:整數(shù)類型是不可變類型,整數(shù)對象是不可變對象。修改整數(shù)對象時,Python將以新值創(chuàng)建一個新對象,變量名與新對象進(jìn)行綁定,舊對象如果沒有其他引用,則會被釋放(通過小整數(shù)池進(jìn)行創(chuàng)建回收優(yōu)化,具體后續(xù)介紹,這里先按下不表,后續(xù)會補充)。
圖示如下:
以Python中的列表對象為例:列表類型是可變類型,列表對象是可變對象。列表對象內(nèi)部會維護(hù)一個動態(tài)數(shù)組,存儲元素對象的指針,列表對象再增減對象的時候,會修改該數(shù)組,而列表對象的頭部(后續(xù)會詳細(xì)介紹)會保持不變:
4變長對象和定長對象
定長對象:對象的內(nèi)存大小一定
邊長對象:同一類型,不同對象會有不同的大小
通過sys.getsizeof()可以查看一個對象的大?。?/p>
importsys
a=1
b=1111111111111111111111111111111111111111111111111111111111
c=1.0
d=1.00000000000000000000000000000000000000000000000000000001
sys.getsizeof(a)
sys.getsizeof(b)
sys.getsizeof(c)
sys.getsizeof(d)
整數(shù)對象是變長對象:固定位數(shù)的整數(shù)能夠表示的范圍是有限的,故整數(shù)對象會隨著自身的數(shù)值大小而改變自身內(nèi)存大小。在Python中采用了類似C++中大整數(shù)類的思路實現(xiàn)整數(shù)對象,通過串聯(lián)多個普通32位整數(shù)來支持更大的數(shù)值范圍(詳細(xì)源碼后續(xù)介紹)。
浮點數(shù)對象是定長對象:根據(jù)機(jī)組的知識,我們用32位表示單精度浮點數(shù),用64位表示雙精度浮點數(shù),它們都是定長的。在Python中,浮點數(shù)背后是由一個double來實現(xiàn)的,就算表示很大的數(shù),浮點數(shù)對象的大小也不變(這樣做的代價是犧牲了精度)。當(dāng)然,浮點數(shù)也是有大小限制的,可以思考下:我們通過float()將一個很大的int轉(zhuǎn)化為float時,是否會報錯?Python底層是否做了相應(yīng)的判斷呢?
5補充
變量名:我們創(chuàng)建對象時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康皮膚中班課件下載
- 藥品gsp認(rèn)證管理辦法
- 葡萄酒常規(guī)發(fā)酵管理辦法
- 虹口區(qū)辦公用品管理辦法
- 融資擔(dān)保金管理辦法規(guī)定
- 衢江區(qū)臨時宿舍管理辦法
- 衡水市生產(chǎn)資料管理辦法
- 裕安區(qū)臨時攤位管理辦法
- 西海岸區(qū)宅基地管理辦法
- 計劃管理與合同管理辦法
- 不合格品退貨處理單
- 大連海事大學(xué)畢業(yè)成績表
- 尾礦庫模施袋筑壩工藝在施工中的應(yīng)用
- 中國34個省級行政區(qū)輪廓圖
- 人教版三年級下冊數(shù)學(xué)(全冊)同步隨堂練習(xí)一課一練
- 肺小結(jié)節(jié)定位和肺段切除規(guī)劃PPT學(xué)習(xí)課件
- 精品專題資料(2022-2023年收藏)國家電網(wǎng)公司智能電網(wǎng)知識競賽題目
- 0上海市康復(fù)治療質(zhì)量控制中心推薦病史及記錄單
- (完整word版)sppb簡易體能狀況量表
- 民用航空安全信息管理規(guī)定培訓(xùn)考試
評論
0/150
提交評論