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,這個對象的內
存空間會自己主動回收。
這意味著不須要考慮內存釋放等問題,省去大量的基礎代碼。
?
四、共享引用
例:
>>> a = 3
>>> b = a
此時a,b都成為對象3的一個引用,叫做共享引用。
>>> a = ‘hello‘
當a改變時。這時不會改變b的值,僅僅是a改動為‘hello‘的引用而已。
給變量賦一個新的值。不是替換了原始的變量,而是讓這個變量去引用全然不同的還有一個對象,效果就像又一次賦值一
樣,僅僅會影響被賦值的變量。
?
五、共享引用和原處改動
有一些對象和操作確實會在原處改變對象,比如之前寫過的"Python<1>list",進行一些操作時不是生成一個新的對
象,而是直接改動了自身引用的對象,此時共享引用須要加倍小心。假設你不想要這種現象發生。須要python拷貝
對象。而不是創建引用。最常見的辦法就是從頭到尾的分片。
>>> L1 = L2[:]
此時對當中一個的改動不會影響還有一個。兩個對象在不同的內存區域。
?
?
?
?
?
?
?
?
?
參考<<learning python>>
?
?
?
?
?
Python動態類型簡單介紹