1. 程式人生 > >python動態類型

python動態類型

xfce wax ber ast eal rds nfs rck lln

python是動態語言。不需要事先聲明變量類型,同一變量可以被賦值為不同的對象類型。

變量、對象、引用

  • 變量創建
    python的變量不需要聲明,當代碼第一次給其賦值時就創建它。

  • 變量賦值
    舉例說明,賦值語句 “a = 3”。一般而言賦值過程如下:

    1. 創建被賦值的對象,即在內存中開辟一塊空間,用於保存對象的信息。本例來說是一個整數對象3.
    2. 如果變量名之前沒有被定義過,創建變量名,’a’。如果變量名存在,則跳過。
    3. 建立變量名和被賦值對象之間的引用。引用類似於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動態類型