2.python的變量與賦值


  首先,為何要使用變量這里就不再多說了,我這里就介紹一下變量的命令規則和變量賦值的內存行為。

1.變量的命名規則

  變量其實通過一個標記調用內存中的值,而變量名就是這個標記的名稱,但是萬一這個標記已經被提前占用或者解釋器認為這個標記是不合法的,那么就會報錯。下面總結了一下變量的命名規則:

  1.不能使用python的關鍵字,也就是說標記不能被提前占用,python的關鍵字包括:

  ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

  2.變量名的第一個字符不能是數字,這樣的命名被認為是不合法的。

  3.變量名只能字母數字下划線(_)的任意組合。

  規則就是規則,沒有什么好解釋的,但是我們可以在符合規則的前提下做進一步的要求,詳情請參照python的pep8編碼規范。

 


 

2.變量的賦值

  在python中,我們對變量進行賦值的時候,用的是一個等於符號(=),要注意不是兩個(==)。

  例如:

a = 10

 

   這段代碼的動作就相當於:

  

 

   注意:我們並不是為標記a建立了一個值,而是先建立一個值以后,再用一個標記去指向它。

   在知道了賦值是怎么進行的以后,我們再來看下面這個代碼:

a = 10 
b = a
a = 20

 

   那么,此時b=?

  如果按照我們常用的數學思維的話,那么b肯定是等於20的,但這里卻不是這樣的,如果按照一般的思維的話,是下面這樣的:

  

  如果按照這個邏輯的話,那么b肯定是等於20的,但這里是錯誤的,所以我畫了個叉。

  因為變量是一個標記,用來調用內存中的值,當我們將一個標記賦值給另一個標記的時候,應該是讓其指向另一個標記的內存,而不是指向標記。

  按照這個原則,我們的思路應該是這樣的:

  也就是說此時b應該等於10,下面我們來試驗一下是否正確:

  驗證正確,這個思路沒有問題。

 


3.python中的垃圾回收機制

  這個時候我們可能會有疑問,如果是下面這種情況會怎么樣:

a = 10
a = 20

 

  按照我們之前建立的思維,a已經指向了20了,那么剩下的那個10會怎么樣?

  這就要說起python中的垃圾回收機制了,python會按一定的規則回收內存中的垃圾數據以釋放內存空間。

  Python內存回收的基石是引用計數,“當一個對象的引用被創建或復制時,對象的引用計數加1;當一個對象的引用被銷毀時,對象的引用計數減1”,如果對象的引用計數減少為0,將對象的所占用的內存釋放

  其實我對這部分並不是很熟,所以只能大概講講,可能會有錯誤的地方,如果想繼續深入理解的話可以查看別人的一些文章或者看看官方文檔之類的。

  python通過引用計數,將引用次數為0的數據從內存中清除,具體的回收時機不太清楚,可能是每隔一段時間回收一次。

  簡單的垃圾回收這這樣的,但垃圾回收的機制遠比這要復雜許多,因為有時候會出現循環引用的情況,這種時候,單純清除0次引用的還是不夠的,所以此時還有其他的算法來回收。

  對於垃圾回收我了解的不多,因為我還沒學到那么深入的地步,到時候如何學到了,我會繼續補充。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM