歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python基礎:Python的變量和對象

Python基礎:Python的變量和對象

日期:2017/3/1 10:11:08   编辑:Linux編程

一、基本原理
Python中一切都是對象,變量中存放的是對象的引用。這是一個普遍的法則。我們舉個例子來說,Python是如何來處理的。

  1. x = 'blue'
  2. y = 'green'
  3. z = x

當python執行上面第一句的時候,會在heap中首先創建一個str對象,其文本內容為blue,同時還創建一個名為x的對象引用,x引用的就是這個str對象。第二句也是類似;第三條創建了一個名為z的新對象引用,並將其設置為對象引用x所指向的相同對象。如下圖的變化。

所以看出在Python中賦值操作符號“=”的作用是,將對象引用和內存中的某個對象進行綁定。如果對象已經存在,就進行簡單的重新綁定,以便引用“=”右邊的對象;如果對象引用尚未存在,就首先創建對象,然後將對象引用和對象進行綁定。這很類似與c中的指針的概念。

Python使用“動態類型”機制,也就是說,在Python程序中,任何時候可以根據需要,某個對象引用都可以重新綁定到另一個不同的對象上(不要求是相同的類型),這和其他強化型語言如(C++,Java)不太一樣,只允許重新綁定相同類型的對象上。在Python中,因為有“動態類型”機制,所以一個對象引用可以執行不同類型的對象適用的方法。當一個對象不存在任何對象引用的時候,就進入了垃圾收集的過程。

  1. >>> a = 100
  2. >>> a /10
  3. 10.0
  4. >>> a[0]
  5. Traceback (most recent call last):
  6. File "<pyshell#166>", line 1, in <module>
  7. a[0]
  8. TypeError: 'int' object is not subscriptable
  9. >>> a = 'hello'
  10. >>> a[0]
  11. 'h'
  12. >>> a /10
  13. Traceback (most recent call last):
  14. File "<pyshell#169>", line 1, in <module>
  15. a /10
  16. TypeError: unsupported operand type(s) for /: 'str' and 'int'

第一句 a = 100
Python會在heap創建一個int對象,其內容為100,同時創建a變量,其值指向heap中的int對象

第二句 a/10
Python適用“動態類型”機制,判斷a指向的對象是int型,可以適用/(除法)操作。於是便進行運算產生結果。(它會在heap中在創建一個10.0的對象麼?)

第三句 a[0]
Python適用“動態類型”機制,判斷a指向的對象是int型,並不適用[](分片)操作。於是就進行報錯。

第四句 a = 'hello'
Python會在heap創建一個str對象,其內容為hello,同時改變a變量,使得其值指向heap中的str對象。同時原來的int對象,由於不在存在對象引用,所以就進入了垃圾收集過程。


第五句 a[0]
Python適用“動態類型”機制,判斷a指向的對象是str型,可以適用[](分片)操作。於是便進行運算產生結果。

第六句 a/10
Python適用“動態類型”機制,判斷a指向的對象是str型,並不適用/(除法)操作。於是就進行報錯。

總之 :在Python中一切都是對象,變量總是存放對象引用。當一個對象沒有變量指向它的時候,它便進入了垃圾收集過程。Python的“動態類型”機制,負責檢查變量的對象引用適用操作。如果該對象不適用該操作,則會直接報錯。一句話”變量無類型,對象有類型

Copyright © Linux教程網 All Rights Reserved