1.什麼是變量 2.變量名稱的命名 3.變量賦值 4.變量存儲數據的方式 5.引用計數
python學習過程當中會用到許多數據,那爲了方便操做,須要把這些數據分別用一個簡單的名字表明,方便在接下來的程序中引用。
變量就是表明某個數據(值)的名稱。簡單點說變量就是給數據起個名字python
由字母數字下劃線組成的,且不能以數字開頭,不能使用關鍵字,區分大小寫。編程
命名慣例:編程語言
python命名規範總結: ide
模塊名:小寫字母,單詞之間用_分割,好比ad_stats.py 包名:和模塊名同樣 類名:單詞首字母大寫,好比AdStats ConfigUtil 全局變量名:大寫字母,單詞之間用_分割,好比UMBER COLOR_WRITE 普通變量:小寫字母,單詞之間用_分割,好比this_is_a_var 實例變量:以_開頭,其餘和普通變量同樣,好比_price _instance_var 私有實例變量(外部訪問會報錯):以__開頭(2個下劃線),其餘和普通變量同樣 __private_var 專有變量: __開頭,__結尾,通常爲python的自有變量,不要以這種方式命名 __doc__ __class_
是變量聲明和定義的過程
單個變量賦值:
#!/usr/bin/python函數
counter = 100 # 賦值整型變量 miles = 1000.0 # 浮點型 name = "John" # 字符串 print counter print miles print name
多個變量賦值:學習
Python容許你同時爲多個變量賦值。例如: a = b = c = 1以上實例,建立一個整型對象,值爲1,三個變量被分配到相同的內存空間上。 同時爲多個變量賦不一樣的值。例如: a, b, c = 1, 2, "john" 以上實例,兩個整型對象1和2的分配給變量a和b,字符串對象"john"分配給變量c。
通常編程語言變量存儲數據的方式:this
變量是計算機內存中的一塊區域,變量能夠存儲規定範圍內的值,並且值是可變的。 在建立變量時會在內存中開闢一個空間。基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據能夠被存儲在內存中。所以,變量能夠指定不一樣的數據類型,這些變量能夠存儲整數,小數或字符。 好比c語言在聲明一個變量a以後,會在內存中開闢出一起對應的空間,在此空間中能夠存儲不一樣的值,也就是給變量賦予不一樣的值
python變量在內存中存儲值得方式和其餘編程語言不一樣:指針
在Python中,變量名沒有類型,但對象有 變量名只是對對象的引用(內部實現爲指針) python中是以數據爲主,變量a只是至關於一個內存空間的標籤,a=1開闢一塊空間存儲1,以後從新複製a=2是從新開闢出新的空間存儲2,變量名稱a換了個位置指向新空間中的2 一樣的地址空間能夠有兩個或多個標籤,好比a=1,b=1其實是a和b指向同一個地址空間 查看變量指向地址空間的地址:使用id(變量名稱)函數 >>> a=1 >>> id(a) 19882304 >>> b=1 >>> id(b) 19882304 上例發現同一個值賦值給不一樣變量,實際地址空間未發生變化,只是標籤發生了變化
什麼是引用計數器:
Python內部記錄着全部使用中的對象有多少引用。一個內部跟蹤變量,稱爲一個引用計數器。當對象被建立時,就建立了一個引用計數,當這個對象再也不須要時,也就是說,這個對象的引用計數變爲0時,它被垃圾回收。(這個只是形象的說一下,並非嚴格的100%正確,可是通俗的理解每每是最好的學習方式)code
增長引用計數:對象
當對象被建立並(將其引用)賦值給變量時,該對象的引用技術就是被設置爲1。
當同一個對象的應用或者是對象又被賦值給其餘變量時,或者做爲參數傳遞給函數,方法或類實例時,或者被賦值爲一個窗口對象的成員時,該對象的一個新的引用,或者稱做別名,就被建立(則該對象的引用計數自動加1)
減小引用計數:
當對象的引用被銷燬時,引用計數會減小。最明顯的例子就是當引用離開其做用範圍時,這種狀況最常常出如今函數運行結束時,全部局部變量都被自動銷燬,對象的引用計數也就隨之減小。
當變量被賦值給另一個對象時,源對象的引用技術也會自動減1
其餘形成對象的引用計數減小的方式包括使用del語句刪除一個變量,或者當一個對象的引用計數在如下狀況會減小:
例子:
import sys
a="ab"
sys.getrefcount("ab")
3 第一次結果爲3
b="ab"
sys.getrefcount("ab")
4 第二次結果+1
b=0 b引用了其餘的對象(0),對於"ab"來說就取消了一個引用
sys.getrefcount("ab")
3 結果在上次引用的基礎上-1
注意:在交互式解釋器中帶空格的對象引用次數永遠爲3,可是在腳本中迴歸正常,例如:
#!/usr/bin/env python
import sys print sys.getrefcount("ab cd") a="ab cd" print sys.getrefcount("ab cd") b="ab cd" print sys.getrefcount("ab cd") c=b print sys.getrefcount("ab cd")
垃圾收集:再也不被使用的內存會被一種稱爲垃圾收集的機制釋放。像上面說的,雖然解釋器跟蹤對象的引用計數,可是垃圾收集器負責釋放內存。垃圾收集器是一塊獨立的代碼,它用來尋找引用計數爲0的對象,他也負責檢查那些雖然引用計數大於0但也該被銷燬的對象。特定情形會致使循環引用。一個循環引用發生在當你有至少兩個對象互相引用時,也就是所說的引用都消失時,這些引用仍然存在,這說明只靠引用計數是不夠的。Python的垃圾收集器其實是一個引用計數器和一個循環垃圾收集器。當一個對象的引用計數變爲0,解釋器會暫停,釋放掉這個對象和僅有這個對象可訪問的其餘對象,做爲引用計數的補充,垃圾收集器也會留心被分配的總量很大(以及未經過引用計數銷燬的那些) 的對象。在這種狀況下,解釋器會暫停下來,試圖清理全部爲引用的循環。