動態型別以及由它提供的多型性,這個概念無疑是python語言的簡潔性和靈活性的基礎。
在python中,並不會宣告指令碼中使用的物件的確切的型別。事實上,程式甚至可以不在意特定的型別;相反地,它們能夠自然地適用於更廣泛的場景下,因為動態型別是python語言靈活性的根源。
變數建立
乙個變數,例如a,當**第一次給她賦值時就被建立了,之後的賦值將會改變已建立的變數名的值。從技術上來講,python在**欲行之前先檢測變數名,可以當成是最初的賦值建立變數
變數型別
變數用於不會有任何的和它關聯的型別資訊或約束。型別的概念是存在於物件中而不是變數中
。變數原本是通用的,她只是在乙個特定的時間點,簡單地引用了乙個特定的物件而已
變數使用
當變數出現在表示式中時,它會馬上被當成引用的物件所代替,無論這個物件是什麼型別,此外,所有的變數必須在其使用前明確地賦值,使用未賦值的變數會產生錯誤。
從概念上來說,python會執行三個不同的步驟去完成這個請求:
1. 建立乙個物件代表值3
2. 建立乙個變數a,如果它還沒有建立的話
3. 將變數與新的物件3連線(引用,指標指向)
如圖.1 :所示的是乙個在python中的內部結構。變數和物件儲存在記憶體的不同部門,並通過連線相關聯。變數總是連線到物件,並且絕不會連線到其他的變數上,但大部分的物件可以連線到其他的物件(例如:乙個列表物件能夠連線到它所包含的物件)
如圖.1:變數名和物件,在執行a=3後,變數a變成物件3的引用,在內部,變數事實上是到物件記憶體空間的乙個指標
在python中從變數到物件的連線稱為引用,也就是說,引用是一種關係,以記憶體中的指標的形式顯示。一旦變數被使用(引用),python自動跟隨這個變數到物件的連線。
至少從概念上來講,在指令碼中,每一次用過執行乙個表示式生成乙個新的值,python都會建立乙個物件去表現這個值。從內部來看,作為一中優化,python快取了不變的物件並對其進行復用。例如,小的int和字串(每乙個0都不是一快真正的新記憶體快,後面我會給大家介紹)。但是,從邏輯的角度來看,這工作起來就像每乙個表示式結構的值都是乙個不同的物件,每乙個物件都有不同的記憶體。
從技術來講,物件有更複雜的結構而不僅僅是有足夠的空間去表現她的值那麼簡單。每乙個物件都有兩個標準的頭部資訊:乙個型別識別符號去標示這個物件的型別,以及乙個引用的計數器,用來決定是不是可以**這個物件。
Python 動態型別
動態型別 dynamic typing 是python另乙個重要的核心概念。我們之前說過,python的變數 variable 不需要宣告,而在賦值時,變數可以重新賦值為任意值。這些都與動態型別的概念相關。1.動態型別 在我們接觸的物件中,有一類特殊的物件,是用於儲存資料的。常見的該類物件包括各種數...
python動態型別
python是動態語言。不需要事先宣告變數型別,同一變數可以被賦值為不同的物件型別。不可變型別 不可變型別,物件一旦建立不可修改。整數型別 int 浮點數型別 float 複數型別 complex 字串型別 str 元祖型別 tuple 集合型別 set,都屬於不可變型別。下面通過變數賦值的過程理解...
Python動態型別
在python中,我們使用變數時,並沒有宣告變數的存在和型別。型別是在執行過程中自動決定的。a 3python將會執行三步去完成上面這個請求。1.建立乙個物件代表3 2.建立乙個變數a,如果a未建立。3.將變數a與物件3相連線。可以將變數a看作物件3的乙個引用。a 3 b a多個變數可以指向同乙個物...