python的動態型別簡介

2021-08-07 04:23:01 字數 2042 閱讀 2296

本篇簡單討論python的動態型別,它對於入門python開發來講是必不可少的。首先來看幾行只有動態型別語言才可以這麼寫的**

>>> a = 3

>>> a = 'hello,python'

>>> a = [1,2,3,4,5]

我先後給a賦值了數字型別、字串型別和列表型別,那麼問題來了,a到底是什麼型別?

有人可能會覺得,a最後被賦值為列表型別,那它最終應該是列表型別吧。正確的答案是:a是沒有型別的。

a = 3為例,python建立了乙個值為3的整數型別的物件,然後通過a來指向它。a是變數(variable),3是物件(object),變數a是物件3的乙個引用(reference),簡單的說就是:變數是乙個指標,指向乙個物件。

在python中,變數是沒有型別的,而物件是有型別的,型別只存在於物件上。python的變數就是在特定的時間引用了乙個特定型別的物件。

python物件有兩個頭部資訊,乙個是型別識別符號(乙個指向特定型別物件的指標)和乙個引用計數器。前者標識了物件的型別,後者決定何時物件被**。

>>> a = 3

>>> a = 'hello,python'

>>> a = [1,2,3,4,5]

上面的**連著建立了三個物件,而物件a指向最後乙個列表物件,前兩個物件由於沒有任何變數指向它,所以會被自動**掉。這個過程是自動的,無需程式設計師編寫任何**。

一提到引用計數器,肯定有人想到了迴圈引用之類的特殊情況,相信python肯定也考慮到了這些問題,並且處理的很好。

>>> a=2

>>> b=a

>>> a+=2

>>> a

4>>> b

2

在上面的**中,a和b同時指向物件2,然後通過a += 2來修改物件a,但最終的結果是a=4,b=2。我最初以為的最終結果是a和b都等於4。由於數字型別是不可變的,所以,a += 2會使a指向乙個新的物件,這個新物件的值是4,而b還指向原來的物件2。

再看下面的**

>>> a = [1,2,3,4,5]

>>> b = a

>>> b

[1, 2, 3, 4, 5, 6]

在python的核心資料型別中,數字、字串、元組是不可變的,而列表、字典、集合(set)是可變的。

在python中有兩個操作符經常用來比較兩個物件是否相等:

- ==操作符,比較兩個物件的值是否相等

- is操作符,比較兩個物件是否是同乙個物件,或者說比較指標是否相等

>>> a = [1,2,3,4,5]

>>> b = a

>>> a == b

true

>>> a is b

true

上面的**中,變數a和b指向同乙個物件,所以,』==操作符』和』is操作符』比較的結果都是相等的。

>>> a = [1,2,3,4,5]

>>> b = a[:]

>>> a == b

true

>>> a is b

false

上面的**中,a和b各自指向乙個值相等的列表,所以,』==操作符』比較的結果相等,而』is操作符』比較的結果是不相等。

>>> a = 3

>>> b = 3

>>> a == b

true

>>> a is b

true

上面又是怎麼回事呢?這是由於python在建立3這個物件時偷了個懶,python的快取機制(較小的整數和字串會被快取並復用)在此生效了。下面的**證明了python只會快取較小的數字

>>> a = 1212313

>>> b = 1212313

>>> a == b

true

>>> a is b

false

Python學習 動態型別簡介

變數 物件和引用 a 3 不需要提前宣告變數 變數在賦值的時候才被建立,它可以引用任何型別的物件,並且必須在引用之前賦值。他們三者之間的關係 變數是乙個系統表的元素,擁有指向物件的連線的空間 物件是分配的一塊記憶體,有足夠的空間去表示他們所代表的值 引用是自動形成的從變數到物件的指標 變數名沒有型別...

動態型別簡介(3)

概念性的知識 python中型別是執行過程中自動決定的,而不是通過 宣告,所以沒有必要事先宣告 引用 從變數到物件的連線稱作引用,也就是說,引用是一種關係,以記憶體中的指標的形式實現 乙個物件賦多值過程 型別屬於物件,而不屬於變數,重新賦值時,物件在記憶體中占用的空間就會被 的空間被放入自由空間池,...

Python 動態型別

動態型別 dynamic typing 是python另乙個重要的核心概念。我們之前說過,python的變數 variable 不需要宣告,而在賦值時,變數可以重新賦值為任意值。這些都與動態型別的概念相關。1.動態型別 在我們接觸的物件中,有一類特殊的物件,是用於儲存資料的。常見的該類物件包括各種數...