日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习之变量、对象和引用

發(fā)布時(shí)間:2025/3/15 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习之变量、对象和引用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python學(xué)習(xí)之變量、對象和引用

文章目錄

  • Python學(xué)習(xí)之變量、對象和引用
    • 問題的引出
    • 變量創(chuàng)建
    • 變量類型
    • 變量使用
    • 動態(tài)類型
    • 類型屬于對象,而不是變量
    • 對象的垃圾收集
    • 參考資料

問題的引出

當(dāng)在Python中運(yùn)行賦值語句a=3時(shí),熟悉C語言的朋友肯定會感到奇怪:難道變量a不需要定義嗎?Python是怎么知道變量a的類型的?

變量創(chuàng)建

一個(gè)變量(也就是變量名),就像a,當(dāng)代碼第一次給它賦值的時(shí)候就創(chuàng)建了它。之后的賦值會改變已創(chuàng)建的變量名的值。其實(shí),說得更嚴(yán)格一點(diǎn),這叫“名稱綁定”。

名稱用于指代對象(你可以理解為名稱是一個(gè)指向?qū)ο蟮闹羔?#xff09;。名稱是通過名稱綁定操作來引入的。以下構(gòu)造會綁定名稱:傳給函數(shù)的正式形參,import語句,類定義,函數(shù)定義,以標(biāo)識符為目標(biāo)的賦值,for循環(huán)的開頭等等等等。

對于初學(xué)者,只要記住 以標(biāo)識符為目標(biāo)的賦值會綁定名稱 就可以了。

變量類型

變量永遠(yuǎn)不會有任何的和它關(guān)聯(lián)的類型信息或約束。類型的概念是存在于對象中而不是變量名中。變量是通用的,它只是在一個(gè)特定的時(shí)間點(diǎn),簡單地引用了一個(gè)特定的對象而已。

變量使用

當(dāng)變量出現(xiàn)在表達(dá)式中時(shí),它會馬上被當(dāng)前引用的對象所代替,無論這個(gè)對象是什么類型。此外,所有的變量必須在其使用前明確地賦值,使用未賦值的變量會產(chǎn)生錯(cuò)誤。

動態(tài)類型

如果清楚地將變量名和對象劃分開來,動態(tài)類型是很容易理解的。例如:

>>> a = 3

對于上面的賦值操作,Python會執(zhí)行三個(gè)不同的步驟去完成這個(gè)請求:

  • 創(chuàng)建一個(gè)對象來代表值3
  • 創(chuàng)建一個(gè)變量a,如果它還沒有被創(chuàng)建的話
  • 將變量a與新的對象3相連接(link)
  • 實(shí)際的效果如下圖:

    Names and objects after running the assignment a = 3. Variable a becomes a reference to the object 3. Internally, the variable is really a pointer to the object’s memory space created by running the literal expression 3.

    如圖所示,變量和對象保存在內(nèi)存中的不同部分,并通過連接相關(guān)聯(lián)(這個(gè)連接在圖中表示為一個(gè)箭頭)。變量總是連接到對象,并且絕不會連接到其他變量上,但是更大的對象可能連接到其他的對象(例如,一個(gè)列表對象能夠連接到它所包含的對象)。

    在Python中從變量到對象的連接稱作引用(reference)。也就是說,引用是一種關(guān)系,類似于C語言的指針。

    要點(diǎn)

    • 變量是一個(gè)系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接的空間。
    • 對象是分配的一塊內(nèi)存,有足夠的空間去表示它所代表的值。
    • 引用是自動形成的從變量到對象的指針。

    類型屬于對象,而不是變量

    每一個(gè)對象都有兩個(gè)標(biāo)準(zhǔn)的頭部信息:一個(gè)類型標(biāo)識符和一個(gè)引用計(jì)數(shù)器。類型標(biāo)識符用來標(biāo)識這個(gè)對象的類型,引用計(jì)數(shù)器用來決定是否可以回收這個(gè)對象。

    對象的垃圾收集

    在Python中,每當(dāng)一個(gè)變量名被賦值給了一個(gè)新對象,之前那個(gè)對象占用的空間就會被回收(如果它沒有被其他的變量名或?qū)ο笏玫脑?#xff09;。這種自動回收對象空間的技術(shù)叫垃圾收集

    在下面的例子中,每個(gè)語句都把變量名x賦值為不同的對象:

    >>> x = 42 >>> x = 'hello' >>> x = 3.14159 >>> x = [1,2,3]

    首先注意x每次被設(shè)置為不同的對象。再者,盡管這不是真正的情況,效果卻是x的類型每次都在改變。

    第二,每一次x被賦值給一個(gè)新的對象,Python都回收了舊對象的空間。例如,當(dāng)執(zhí)行x = 'hello'時(shí),對象42馬上被回收(假設(shè)它沒有被其他的變量名或者對象所引用)。

    在內(nèi)部,Python是這樣來實(shí)現(xiàn)這一功能的:它在每個(gè)對象中保持了一個(gè)計(jì)數(shù)器,計(jì)數(shù)器記錄了當(dāng)前指向該對象的引用的數(shù)目。一旦(并精確在同一時(shí)間)這個(gè)計(jì)數(shù)器被設(shè)置為0,這個(gè)對象的內(nèi)存空間就會被自動回收。在前面的介紹中,假設(shè)每次x都被賦值給一個(gè)新的對象,而前面的一個(gè)對象的引用計(jì)數(shù)器變?yōu)?,就會導(dǎo)致它的的空間被回收。

    垃圾收集最直接的好處就是可以在代碼中任意使用對象而不需要考慮釋放內(nèi)存空間。與C語言這樣的底層語言相比,真是給程序員省了不少麻煩。

    【End】







    參考資料

    《Python學(xué)習(xí)手冊(第4版)》,機(jī)械工業(yè)出版社

    總結(jié)

    以上是生活随笔為你收集整理的Python学习之变量、对象和引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。