1. 程式人生 > >Python動態類型簡單介紹

Python動態類型簡單介紹

tex 引用 edit 之前 必須 eas 發生 pop 共享

動態類型以及它提供的多態性,無疑是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,這個對象的內

存空間會自己主動回收。

這意味著不須要考慮內存釋放等問題,省去大量的基礎代碼。

?

四、共享引用

例:

>>> a = 3

>>> b = a

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

>>> a = ‘hello‘

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

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

樣,僅僅會影響被賦值的變量。

?

五、共享引用和原處改動

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

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

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

>>> L1 = L2[:]

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

?

?

技術分享圖片

?

?

?

?

?

?

?

參考<<learning python>>

?

?

?

?

?

Python動態類型簡單介紹