Python的動態型別繫結與賦值機制

2021-04-13 23:27:59 字數 1548 閱讀 9351

與c、c++等靜態型別繫結的語言不同,python的型別是動態繫結的。也就是你在使用乙個變數的時候是不必對它的型別進行宣告的。這是python的強大之處。它使得python可以靈活的操作各種不同型別的變數。

它背後的機制是什麼呢?掌握幾個概念,就可以明白。

1.名字(name)與物件(object

先說說什麼是物件,物件就是系統分配的一塊記憶體,這個記憶體可以有足夠的空間表示希望代表的value以及一些與該物件有關的資訊標記。

名字的作用就是用來指示乙個物件,使我們通過名字就可以對物件進行操作。

這就像生活中,每乙個人就相當於乙個物件,佔據一定的空間。而每個人都要有個名字,這個名字的作用只是起到乙個橋梁作用,當我們聽到乙個名字時可以聯絡到名字代表的那個「真正的」人。

2.python裡的物件

python

裡的物件毫無疑問也是一塊記憶體,它儲存的資訊除了物件本身代表的

value

還有型別,所以說在

python

中型別是與物件繫結的。

3.引用

所謂引用就是將乙個名字與乙個物件聯絡起來。就像乙個新生兒,父母想出了乙個名字,並將這個名字賦予他,於是名字與孩子之間就對應起來,這就是引用。

4.python的賦值機制

python中的賦值過程可以分成三步,以a = 3為例:

a.建立乙個物件用來表示3

b.起乙個名字a(如果之前沒有用過這個名字)

c.將名字a與物件聯絡起來。

ok,賦值完畢。

了解了這幾個概念,我們可以明白,在python中乙個變數並沒有型別,它的型別完全取決於它所指向的物件。

>>> a = 1

a代表的型別就是整數,因為它是對乙個整型數物件1的引用。

>>> a = 「hello world」,則a代表的型別就是字串,因為它是對字串型別物件」hello world」的引用。

python的這種動態型別繫結與賦值機制十分靈活。但也可能帶來一定風險。例如:

>>> a = [1, 2, 3]

>>> b = a

>>> a[0] = 4

>>> b

[4, 2, 3]

列表是一系列物件的集合。名字a是對列表物件[1, 2, 3]的引用,b = a因此b也是對[1, 2, 3]的引用,即a和b指向同乙個物件,這樣當a[0]被賦值為4時,相當於列表物件被改變了,即b所對應的物件被改變了。如果希望b的物件不被改變,可以使用copy.deepcopy()。系統將複製乙個與a所指向的物件值相同但處於不同記憶體空間的新物件,並將名字b與其關聯。

Python 多型與動態繫結

coding utf 8 class geometricobject def init self,color green filled true self.color color self.filled filled defgetcolor self return self.color defset...

動態型別 動態繫結 動態載入

1.動態型別 執行時才知道,物件的型別,動態型別在程式設計中非常常見,簡單的說就是id型別 比如 在自定的時候就是,id型別。當前我們有時候自己定的方法,不確定,傳進來的是什麼型別的物件,我們也id型別,然後在方法內部去確定型別 2.動態繫結 物件被例項化後,就確定的物件型別,也確定了物件的屬性和響...

Python的動態繫結與賦值機制

文章出處 與c c 等靜態型別繫結的語言不同,python的型別是動態繫結的。也就是你在使用乙個變數的時候是不必對它的型別進行宣告的。這是python的強大之處。它使得python可以靈活的操作各種不同型別的變數。它背後的機制是什麼呢?掌握幾個概念,就可以明白。1.名字 name 與物件 objec...