天天看點

Python動态類型簡單介紹

動态類型以及它提供的多态性,無疑是Python語言簡潔性和靈活性的基礎。

一、變量

<1>變量建立

一個變量a。當代碼第一次給它指派時就建立了它,之後的指派将會改變已建立的變量名的值。

<2>變量類型

變量永遠不會有不論什麼的和它關聯的類型資訊或限制。變量原本是通用的。它僅僅是在一個特定的時間點,簡單的引用了

一下特定的對象而已。

<3>變量使用

當變量出如今表達式中。它會立即被目前引用的對象所替代(對象是有類型的)。此外全部的變量必須在使用前明白的

指派,使用未指派的變量會錯誤發生。

總而言之。變量在指派時才建立。它能夠引用不論什麼類型的對象,而且必須在引用前指派。

比如  a = 3

會經曆三個步驟:

<1>建立一個對象來代表值3

<2>建立一個變量a

<3>将變量與新的對象相連接配接

是以可得

對象是配置設定的一塊記憶體。有足夠的空間去表示它們所代表的值。

變量是一個系統表的元素,擁有指向對象的連接配接的空間。

引用是自己主動形成的從變量到對象的指針。

二、類型屬于對象。而不是變量

對一個變量多次指派得,

>>> a = 3

>>> a = 'hello'

>>> a = 3.1415

由此可見變量名是沒有類型的,而類型是屬于對象的。

我們對a的改動僅僅是讓它成為不同對象的引用。

對象是有類型

的。整數對象3包括值3以及一個頭部資訊,告訴python這是一個整數類型。

三、對象的垃圾收集

在python中,當一個變量名被賦予一個新的對象,之前的那個對象占用的空間就會被回收(假設它沒有被其它變量引

用)。稱為垃圾收集。

在内部python是這樣來實作這一功能的:

它在每一個對象中保持了一個計數器,記錄了目前指向該對象的引用的數目,一旦這個計數器的值為0,這個對象的内

存空間會自己主動回收。

這意味着不須要考慮記憶體釋放等問題,省去大量的基礎代碼。

四、共享引用

例:

>>> b = a

此時a,b都成為對象3的一個引用,叫做共享引用。

當a改變時。這時不會改變b的值,僅僅是a改動為'hello'的引用而已。

給變量賦一個新的值。不是替換了原始的變量,而是讓這個變量去引用全然不同的還有一個對象,效果就像又一次指派一

樣,僅僅會影響被指派的變量。

五、共享引用和原處改動

有一些對象和操作确實會在原處改變對象,比如之前寫過的"Python<1>list",進行一些操作時不是生成一個新的對

象,而是直接改動了自身引用的對象,此時共享引用須要加倍小心。假設你不想要這種現象發生。須要python拷貝

對象。而不是建立引用。最常見的辦法就是從頭到尾的分片。

>>> L1 = L2[:]

此時對當中一個的改動不會影響還有一個。兩個對象在不同的記憶體區域。

Python動态類型簡單介紹

參考<<learning python>>