Python的動態繫結與賦值機制

2021-05-25 04:34:22 字數 1550 閱讀 7830

**:文章出處:

與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的動態型別繫結與賦值機制

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

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...

python 動態繫結屬性與方法

動態繫結屬性與方法的意思就是在本沒有這個屬性與方法的例項物件中新增這個屬性與方法。具體操作如下 class stduent def init self,name,age self.name name self.age age defeat self print self.name 正在吃飯 std1...