當前位置:
首頁 > 最新 > Python動態類型簡介

Python動態類型簡介

在C語言中使用變數, 需先聲明其類型, 如int a = 3, 而Python中直接 a = 3就行, Python怎麼知道那代表了一個整數呢?

在Python中類型是在運行過程中決定的, 而不是事先聲明的. 像上面Python中運行賦值語句 a = 3, 代碼中沒有說明a是整數對象類型, 但一樣也能工作, 可按如下思路來理解該原由.

變數創建:一個變數, 就像a, 當代碼第一次給它賦值時就創建了它, 之後的賦值將會改變已創建的變數名的值.

變數類型:變數永遠不會有任何的和它關聯的類型信息或約束. 類型的概念是存在於對象中而不是變數名中. 變數原本是通用的, 它只是在一個特定的時間點, 簡單地引用了一個特定的對象而已.

變數使用:當變數出現在表達式中時, 它會馬上被當前引用的對象所代替, 無論這個對象是什麼類型. 此外, 所有的變數必須在其使用前明確的賦值, 使用未賦值的變數會產生錯誤.

動態語言的類型和靜態語言的有明顯不同, 若能清楚的將變數名和對象劃分開來, 動態類型是很容易理解的.

從上面的概念來看, Python會執行三個步驟去完成這個操作:

1. 創建一個對象來代表值3.

2. 創建一個變數a, 如果它還沒有創建的話.

3. 將變數與新的對象3相連接.

效果圖如下所示, 變數和對象保存在內存中不同的部分, 並通過連接相關聯.

上面過程, 使用具體的術語來講呢:

· 變數名是一個系統表的元素, 擁有指向對象空間的連接.

· 對象是分配的一塊內存, 有足夠的空間去表示它所代表的值.

· 引用是自動形成的從變數名到對象的指針.

類型屬於對象, 而不是變數

Python中, 變數名沒有類型, 對象才有類型. Python在每個對象上保存了類型標識, 和引用計數. 像下面變數a由引用整數3, 改變為引用字元串"spam"後, 3這個對象會發生什麼變化呢, 進入下一個話題.

>>> a = "spam"

對象的垃圾收集機制

上面說到了, Python在每個對象上保持了一個計數器, 其記錄了指向該對象的引用數目, 一旦計數器被設置為0, 該對象的內存空間就會自動回收.

可以通過sys模塊中的getrefcount函數, 查看對象的引用計數.

>>> import sys

>>> sys.getrefcount("spam")

3


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python 即將停止支持Python 2.7,全面轉向 Python 3
100個程序員的秘密

TAG:Python |