最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python萬物皆對(duì)象理解及源碼學(xué)習(xí)

 更新時(shí)間:2022年05月17日 17:16:34   作者:Blanker_711  
這篇文章主要為大家介紹了Python萬物皆對(duì)象的源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

萬物皆對(duì)象

這篇博客的內(nèi)容主要是針對(duì)Python中萬物皆對(duì)象的理解,對(duì)Python的類型、對(duì)象體系做一個(gè)整體的梳理。

在Python中,一切皆為對(duì)象,一個(gè)整數(shù)是一個(gè)對(duì)象,一個(gè)字符串也是一個(gè)對(duì)象,基本類型(如int)也是對(duì)象。Python不再區(qū)別對(duì)待基本類型和對(duì)象,所有的基本類型內(nèi)部均由對(duì)象實(shí)現(xiàn)。

>>> a = int
>>> b = 1
>>> id(a)
140734789683952
>>> id(int)
140734789683952
>>> a
<class 'int'>
>>> id(b)
2421963817200
>>> id(1)
2421963817200
>>> b
1

1 類型對(duì)象和實(shí)例對(duì)象

Python中的類型是一種對(duì)象,稱為類型對(duì)象。整數(shù)類型、字符串類型,以及我們通過class關(guān)鍵字定義的自定義類型也是一個(gè)對(duì)象。

通過類實(shí)例化可以得到一個(gè)實(shí)例化對(duì)象,稱為實(shí)例對(duì)象

2 類型、對(duì)象體系

2.1 元類型type

前面我們提到:Python中的類型是一種對(duì)象,稱為類型對(duì)象。那么類型對(duì)象的類型又是什么呢?

>>> type(int)
<class 'type'>
>>> int.__class__
<class 'type'>

可以看到,類型的類型是type,我們稱之為元類型,但是這個(gè)類型比較特殊,它的實(shí)例對(duì)象是類型對(duì)象。此外,Python中還有一個(gè)特殊的類型object,所有其他類型都繼承于object,即object是所有類型的基類。

圖示如下:

2.2 自定義類型

除了Python的內(nèi)置類型,我們自定義一個(gè)類型MyClass,同樣地,可以得到:

2.3 自定義類型子類

再定義一個(gè)類型MySubClass,該類型為MyClass的子類:

2.4 type和object的關(guān)系

在上述示例中,我們描述了不同對(duì)象、類型之間的繼承、類型關(guān)系,但是對(duì)于兩個(gè)特殊的類型type和object的關(guān)系并沒有指出,我們先來打印看一下:

>>> type(type)
<class 'type'>
>>> type(object)
<class 'type'>
>>> type.__base__
<class 'object'>
>>> object.__base__
>>> print(object.__base__)
None

可以看到:object的類型也是type,type本身的類型也是type;而type的父類也是所有對(duì)象的父類——object,而object本身沒有父類。由此我們可以歸納出:

object是所有類型的基類(除了它自己),本質(zhì)上是一種類型,其類型是type,同時(shí)也是type的基類;

type是所有類型的類型,本質(zhì)上是一種類型,其類型是它自己,也是object的類型;

注:object本身不能有基類,這是因?yàn)?mdash;—對(duì)于存在繼承關(guān)系的類,成員屬性和成員方法查找需要回溯繼承鏈,不斷查找基類。因此,繼承鏈必須有一個(gè)終點(diǎn),不然就會(huì)死循環(huán)。

最后我們把type和object的關(guān)系補(bǔ)充進(jìn)來:

3 可變對(duì)象與不可變對(duì)象

可變對(duì)象在創(chuàng)建之后,其值可以修改;不可變對(duì)象在創(chuàng)建之后,其值不可以進(jìn)行修改。

以Python中的整數(shù)對(duì)象為例:整數(shù)類型是不可變類型,整數(shù)對(duì)象是不可變對(duì)象。“修改整數(shù)對(duì)象”時(shí),Python將以新值創(chuàng)建一個(gè)新對(duì)象,變量名與新對(duì)象進(jìn)行綁定,舊對(duì)象如果沒有其他引用,則會(huì)被釋放(通過“小整數(shù)池”進(jìn)行創(chuàng)建回收優(yōu)化,具體后續(xù)介紹,這里先按下不表,后續(xù)會(huì)補(bǔ)充)。

圖示如下:

以Python中的列表對(duì)象為例:列表類型是可變類型,列表對(duì)象是可變對(duì)象。列表對(duì)象內(nèi)部會(huì)維護(hù)一個(gè)動(dòng)態(tài)數(shù)組,存儲(chǔ)元素對(duì)象的指針,列表對(duì)象再增減對(duì)象的時(shí)候,會(huì)修改該數(shù)組,而列表對(duì)象的“頭部”(后續(xù)會(huì)詳細(xì)介紹)會(huì)保持不變:

4 變長(zhǎng)對(duì)象和定長(zhǎng)對(duì)象

定長(zhǎng)對(duì)象:對(duì)象的內(nèi)存大小一定

邊長(zhǎng)對(duì)象:同一類型,不同對(duì)象會(huì)有不同的大小

通過sys.getsizeof()可以查看一個(gè)對(duì)象的大小:

>>> import sys
>>> a = 1
>>> b = 1111111111111111111111111111111111111111111111111111111111
>>> c = 1.0
>>> d = 1.00000000000000000000000000000000000000000000000000000001
>>> sys.getsizeof(a)
28
>>> sys.getsizeof(b)
52
>>> sys.getsizeof(c)
24
>>> sys.getsizeof(d)
24

整數(shù)對(duì)象是變長(zhǎng)對(duì)象:固定位數(shù)的整數(shù)能夠表示的范圍是有限的,故整數(shù)對(duì)象會(huì)隨著自身的數(shù)值大小而改變自身內(nèi)存大小。在Python中采用了類似C++中大整數(shù)類的思路實(shí)現(xiàn)整數(shù)對(duì)象,通過串聯(lián)多個(gè)普通32位整數(shù)來支持更大的數(shù)值范圍(詳細(xì)源碼后續(xù)介紹)。

浮點(diǎn)數(shù)對(duì)象是定長(zhǎng)對(duì)象:根據(jù)機(jī)組的知識(shí),我們用32位表示單精度浮點(diǎn)數(shù),用64位表示雙精度浮點(diǎn)數(shù),它們都是定長(zhǎng)的。在Python中,浮點(diǎn)數(shù)背后是由一個(gè)double來實(shí)現(xiàn)的,就算表示很大的數(shù),浮點(diǎn)數(shù)對(duì)象的大小也不變(這樣做的代價(jià)是犧牲了精度)。當(dāng)然,浮點(diǎn)數(shù)也是有大小限制的,可以思考下:我們通過float()將一個(gè)很大的int轉(zhuǎn)化為float時(shí),是否會(huì)報(bào)錯(cuò)?Python底層是否做了相應(yīng)的判斷呢?

5 補(bǔ)充

變量名:我們創(chuàng)建對(duì)象時(shí)會(huì)為對(duì)象分配對(duì)應(yīng)的內(nèi)存空間,那么我們將變量名和對(duì)象綁定時(shí),變量又是如何存儲(chǔ)的呢?

詳見Python源碼學(xué)習(xí)筆記:Python作用域與名字空間

以上就是Python萬物皆對(duì)象理解及源碼學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Python對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

  • python 爬取影視網(wǎng)站下載鏈接

    python 爬取影視網(wǎng)站下載鏈接

    一個(gè)簡(jiǎn)單的爬取影視網(wǎng)站下載鏈接的爬蟲,非常適合新手學(xué)習(xí),感興趣的朋友可以參考下
    2021-05-05
  • Python如何查看并打印matplotlib中所有的colormap(cmap)類型

    Python如何查看并打印matplotlib中所有的colormap(cmap)類型

    這篇文章主要介紹了Python如何查看并打印matplotlib中所有的colormap(cmap)類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中實(shí)現(xiàn)文本預(yù)處理的方法小結(jié)

    Python中實(shí)現(xiàn)文本預(yù)處理的方法小結(jié)

    文本數(shù)據(jù)是數(shù)據(jù)科學(xué)和自然語言處理領(lǐng)域的關(guān)鍵組成部分,本文將深入探討Python中文本預(yù)處理的關(guān)鍵步驟,并提供豐富的示例代碼,希望對(duì)大家有所幫助
    2023-12-12
  • Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    Python報(bào)錯(cuò):ModuleNotFoundError的解決辦法

    "ModuleNotFoundError: No module named 'xxx'"這個(gè)報(bào)錯(cuò)是個(gè)非常常見的報(bào)錯(cuò),幾乎每個(gè)python程序員都遇到過,下面這篇文章主要給大家介紹了關(guān)于Python報(bào):ModuleNotFoundError錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2022-06-06
  • Python?Pygame實(shí)戰(zhàn)之五款童年經(jīng)典游戲合集

    Python?Pygame實(shí)戰(zhàn)之五款童年經(jīng)典游戲合集

    本文為大家總結(jié)了五款利用Python+Pygame實(shí)現(xiàn)的童年經(jīng)典游戲:推箱子、滑雪、八分音符醬、保衛(wèi)蘿卜和飛機(jī)大戰(zhàn),快跟隨小編一起學(xué)習(xí)一下
    2022-04-04
  • python 根據(jù)excel中顏色區(qū)分讀取的操作

    python 根據(jù)excel中顏色區(qū)分讀取的操作

    這篇文章主要介紹了python 根據(jù)excel中顏色區(qū)分讀取的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法

    Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法

    在現(xiàn)代計(jì)算任務(wù)中,尤其是處理大量數(shù)據(jù)或計(jì)算密集型任務(wù)時(shí),使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過預(yù)先創(chuàng)建的進(jìn)程來并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷毀,感興趣的朋友一起看看吧
    2024-10-10
  • python3調(diào)用R的示例代碼

    python3調(diào)用R的示例代碼

    本篇文章主要介紹了python3調(diào)用R的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • django xadmin實(shí)現(xiàn)自定義頁面并且權(quán)限控制方式

    django xadmin實(shí)現(xiàn)自定義頁面并且權(quán)限控制方式

    這篇文章主要介紹了django xadmin實(shí)現(xiàn)自定義頁面并且權(quán)限控制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 最新評(píng)論

    西藏| 吉木乃县| 宁都县| 华容县| 邮箱| 海口市| 南漳县| 万安县| 弥渡县| 兰溪市| 新乡县| 遂昌县| 锦州市| 吉林省| 大理市| 宁明县| 龙门县| 洞口县| 中牟县| 宜兰市| 兰考县| 柏乡县| 邓州市| 利辛县| 临沭县| 繁峙县| 会昌县| 常熟市| 木里| 葵青区| 沙田区| 万山特区| 琼中| 长宁区| 银川市| 临桂县| 上虞市| 黄骅市| 吐鲁番市| 阿城市| 柳州市|