a=1,其中 a 就是變量名稱,1 就是它的值。在程序運行過程當中,變量的值通常都會發生改變,內存中會專門開闢一段空間,用來存放變量的值,而變量名將指向這個值所在的內存空間。與變量相對的就是常量,在程序運行過程當中,常量的值不會發生改變。java
['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種:
1)變量中單詞與單詞之間使用下劃線分隔python
hello_kitty='abc'
2)變量中的每一個單詞的首字母大寫數組
helloKitty='abc'
Tip:推薦使用第一種方式~緩存
a=1,就是一個變量的賦值過程,等號「=」左邊的值賦值給右邊的變量a,這個過程已經包含了變量的申明和定義過程,每一個變量須要先賦值再使用,變量在被賦值以後纔會被建立。不一樣於其餘語言,例如在C語言中,變量在被賦值前,必須先定義變量的類型,而Python不須要,能夠不定義變量的類型直接賦值,Python解釋器會根據語法和操做數決定對象的類型。
ide
String str = "abc"; char sex = 'M';
>>> str = 'abc' >>> var = 1
在python中,能夠對同一個變量反覆賦值,且每次賦值的數據類型都不一致(type()函數查看數據類型):函數
>>> abc = 1 >>> type(abc) <class 'int'> # abc 爲 int 類型 >>> abc = 1.2 >>> type(abc) <class 'float'> # abc爲 float 類型 >>> abc = 'hello' >>> type(abc) <class 'str'> # abc爲 字符串 類型
內存圖解:
編碼
程序中的一個賦值操做,例如:abc=1,在內存中大體能夠分爲兩個步驟:
1)內存中開闢一段空間用於存放值 1
2)內存中建立一個變量abc,並指向 值 1code
賦值完成後,若修改 abc 的值,python解釋器並非修改變量abc指向的內存空間中存放的值,而是從新開闢一段內存空間,將新的值存放進去,變量abc從新指向這段新開闢的內存空間:對象
>>> abc = 1 >>> id(abc) 1465150944 >>> abc='hello kitty' >>> id(abc) 1730859168688
注:函數id()用於查看變量的內存地址~blog
示例1:
>>> a = 10 >>> b = 10 >>> id(a) 1465151232 >>> id(b) 1465151232
示例2:
>>> a = 300 >>> b = 300 >>> id(a) 1730858159920 >>> id(b) 1730858412880
如上面所說,在Python中修改變量的值並非在對應的內存空間中直接修改,而是須要malloc從新分配內存,用完以後再回收。爲了提升效率,Python解釋器將小整數[-5,257)存放在小整數對象池中,即small_ints數組中。small_ints緩存了[-5,257) 之間的全部整數,且在python解釋器初始化後small_ints數組就一直存在。若變量的值在[-5,257)範圍內,就直接從small_ints數組中獲取,而不須要再分配內存空間。
小整數的範圍爲[-5,257),若要修改須要經過修改python的源代碼實現
因此如 示例1 中所示:不一樣的變量,它們的值是同一個小整數時,這些變量引用的是同一個對象。若整數的值不在[-5,257) 範圍內,python解釋器會將其存放在PyIntBlock中,這裏不作介紹~
多重賦值
同時爲多個變量賦值,也稱鏈式賦值。
a = b = c = 1 # a,b,c的值都爲1
多元賦值
多個變量,多個值,逐一對應。
a, b, c = 1, 2, 3 # a = 1,b = 2,c = 3
對換賦值
x=1; y=2 x, y = y, x # x = 2, y = 1
分解賦值
元組分解後賦值給多個變量
a, b, c = (1,2,3) # a = 1,b = 2,c = 3 s='hello' a,b,c,d,e=s # a = 'h',b = 'e',c = 'l',d = 'l',e = 'o' a,_,_,_,e=s # a = 'h',e = 'o',只取出開頭結尾,單個下劃線僅僅是一個有效的變量名稱,來表示某個變量是臨時的或可有可無的(把不須要的值賦值給下劃線) # 也能夠按下列方式書寫: a,*_,e=s print(a,e) # a = 'h',e = 'o'
增量賦值
x += 1
Python使用引用計數來追蹤內存中的對象。當對象被建立並賦值給變量時,該對象的引用計數被設置爲1。
當對象再次被引用時,引用計數加1。引用計數也會減小(例如del 變量名或對變量從新賦值等),當引用計數爲0是,意味着這個對象已經沒有被使用~
del語句
del語句會刪除對象的一個引用,del語法:del obj[, obj2[, ...objN]]
執行del x
後的兩個動做:
1)從如今的名稱空間中刪除x
2)x所指向的對象的引用計數減1
Python的GC模塊經過引用計數來跟蹤和回收垃圾。在引用計數的基礎上,還能夠經過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用的問題。經過「分代回收」(generation collection)以空間換取時間來進一步提升垃圾回收的效率。
常量指在程序運行過程當中不會改變的量,c語言中有專門的常量定義語法:const int a = 60; 常量定義以後就不能更改,若更改就會報錯,Python中沒有相似const這樣的修飾符,即沒有專門用於定義常量的語法,通常約定俗成 變量名以全大寫的形式來表示這是一個常量~
NAME=kitty
.................^_^