python動態類型
阿新 • • 發佈:2017-09-21
xfce wax ber ast eal rds nfs rck lln
python是動態語言。不需要事先聲明變量類型,同一變量可以被賦值為不同的對象類型。
變量、對象、引用
-
變量創建
python的變量不需要聲明,當代碼第一次給其賦值時就創建它。 -
變量賦值
舉例說明,賦值語句 “a = 3”。一般而言賦值過程如下:- 創建被賦值的對象,即在內存中開辟一塊空間,用於保存對象的信息。本例來說是一個整數對象3.
- 如果變量名之前沒有被定義過,創建變量名,’a’。如果變量名存在,則跳過。
- 建立變量名和被賦值對象之間的引用。引用類似於c語言的指針。
以上過程適用於所有的變量賦值。
-
變量類型
變量本身不包含任何類型約束信息,類型的概念存在於它引用的對象中而不是變量名中。 -
變量使用
當變量出現在表達式中時,它會馬上被引用的對象所代替。所有的變量在使用前必須被賦值,使用未賦值的變量會引起“NameError”異常(變量必須先被創建才能使用) -
對象
每個對象有兩個標準的頭部信息:標識對象類型的類型標誌符,一個引用計數器。一個對象可能同時被多個變量名引用,引用計數器記錄了對象被引用的次數。對於大部分的對象而言,當引用計數器的值為0時,對象所在的內存空間會被回收。 -
共享引用
多個變量名同時引用同一個對象。
python的內置核心對象類型
不可變類型
不可變類型,對象一旦創建不可修改。整數類型 int 、浮點數類型 float、復數類型 complex、字符串類型 str、元祖類型 tuple 、集合類型 set,都屬於不可變類型。下面通過變量賦值的過程理解型不可變對象:
a = 1 #建立變量a到對象1的引用 b = a #建立變量b到對象1的引用, 共享引用 a = 2 #因為int類型的對象1不可修改,所以新建對象2,並且建立變量a到它的引用 #現在變量a、b分別引用不同的對象。
過程如圖:
可變類型
可變類型指對象可原地修改的類型。比較典型的:列表類型 list、字典類型 dict。
以list為例,list是任意對象的有序集合,如下圖所示:
list對象中每個元素都是一個對象引用。通俗理解,list對象的元素有點類似變量,同樣可更改。
python動態類型