歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python動態類型簡介

Python動態類型簡介

日期:2017/3/1 9:50:12   编辑:Linux編程

在python中,類型是在運行過程中自動決定的,而不是通過代碼聲明。這意味著沒有必要事先聲明變量。Python是動態類型的,也是強類型語言(只能對一個對象進行適合該類型的有效的操作)。

變量、對象和引用

變量在賦值時才創建,它可以引用任何類型的對象,並且必須在引用之前賦值。

>>> a=3

Python將會執行三個不同的步驟去完成這個請求,這些步驟反應了Python語言中所有賦值的操作:

(1)創建一個對象來代表值3; (2)創建一個變量a,如果它還沒有創建的話。 (3)將變量與新的對象3相連接。

在Python中從變量到對象的連接稱為引用。

變量是一個系統表的元素,擁有指向對象的連接的空間。 對象是分配的一塊內存,有足夠的空間去表示它們所代表的值。 引用是自動形成的從變量到對象的指針。

垃圾回收機制

Python在每個對象中保持了一個計數器,計數器記錄了當前只想該對象的引用的數目。一旦這個計數器被設置為零,這個對象的內存空間就會自動回收。垃圾收集最直接的,可高收到的好處就是:這意味著可以在腳本中任意使用對象而不需要考慮釋放內存空間。

共享引用

>>> a=3 >>> b=3 >>> a=“spam” 變量a引用了由常量表達式spam所創建的新的對象,但是變量b仍舊引用原始的對象3,因為這個賦值運算改變的不是對象3,僅僅改變了變量a,變量b並沒有發生改變。 在python中,變量總是一個指向對象的指針,而不是可改變的內存區域的標簽。給一個變量賦一個新的值,並不是替換了原來的對象,而是讓這個變量去完成引用完全不同的一個對象。

共享引用與原處修改

>>> L1 = [2,3,4] >>> L2 = L1 >>> L1[0] = 24 >>> L1 [24,3,4] >>> L2 [24,3,4] 在這裡,沒有改變L1,而是改變了L1所引用的對象的一個元素。這類修改會覆蓋列表對象中的某部分。因為這個列表對象是與其他對象共享的,那麼一個像這樣在原處的改變不僅僅會對L1有影響,而且會影響L2。 >>> L1 = [2,3,4] >>> L2 = L1[:] >>> L1[0] = 24 >>> L1 [24,3,4] >>> L2 [2,3,4] 這裡,對L1的修改不會影響L2,因為L2引用的是L1所引用對象的一個拷貝,也就是說,兩個變量指向了不同的內存區域。

共享引用和相等

"=="操作符測試兩個被引用的對象是否有相同的值。 “is操作符“是在檢查對象的同一性。 >>> L1 = [2,3,4] >>> L2 = [2,3,4] >>> L1 == L2 True >>> L1 is L2 False 小的整數和字符串在內存中被緩存並且會被復用。 >>> X = 42 >>> Y = 42 >>> X == Y True >>> X is Y True

總結

動態類型意味著將寫更少的代碼,也是python中多態的根本。python中沒有對類型進行約束,它具備了高度的靈活性。
Copyright © Linux教程網 All Rights Reserved