Python中一切皆對象,這節(jié)主要內(nèi)容如下:
1. 變量命名規(guī)則
2. 變量賦值
4. 變量與內(nèi)存
1. 變量名
Python中變量名遵循下面規(guī)則:
1)字符或者下劃線開頭;
2)由字符和數(shù)字下劃線組成;
3)變量名對大小寫敏感;
4)不能和關(guān)鍵字重名(關(guān)鍵字:例如 if,while等);
正確變量名:x, y, _tmp1, tmp, check_flag;
錯(cuò)誤變量名:1x,if, @s,
2. 變量賦值
Python是動(dòng)態(tài)解釋性語言,賦值時(shí)候不需要指定變量類型。
- 變量賦值實(shí)質(zhì):
1)創(chuàng)建對象;
2)將變量名和對象進(jìn)行綁定;
x = 10,
如果10這個(gè)對象不存在,
python解釋器創(chuàng)建對象10,
然后將x指向這個(gè)對象;
對象決定了類型,變量沒有類型,只是一個(gè)指針;
引用:變量賦值就是一個(gè)引用過程,賦值過程是變量名和對象進(jìn)行綁定,變量名修改時(shí)進(jìn)行解綁定;
好處:當(dāng)多個(gè)變量同時(shí)指向一個(gè)對象時(shí),減小內(nèi)存開銷;
壞處:增加了綁定和解綁定過程,消耗極少時(shí)間;變量賦值類型:
1)直接賦值:
x = 10
2)增量賦值:
x += 20
3)多重賦值:
x = y = z = 10
4)多元賦值:
x, y = 10, '10' 等于 x = 10, y = '10'
3. 變量與內(nèi)存:
- 變量和內(nèi)存關(guān)系:
1)定義兩個(gè)變量x, y,賦予相同的整數(shù)值10,
2)然后修改y的值,使用id方法觀察變量指向地址變化;
>>> x = 10
>>> id(x) #id方法:得到對象的地址
1351918976
>>> y = 10
>>> id(y)
1351918976
>>> id(10)
1351918976
>>> y=20
>>> id(y)
1351919296
>>> id(x)
1351918976
>>>
從上面的例子中我們發(fā)現(xiàn):
1:x,y同時(shí)指向變量10且內(nèi)存地址是相同的;
2:當(dāng)我們修改y值后,y指向地址發(fā)生變化;但是x沒有變化;
需要注意,這種賦值方式只適用于占用內(nèi)存較小的變量、字符串等,當(dāng)我們是使用浮點(diǎn)做下實(shí)驗(yàn)就會(huì)得到不同結(jié)果,這與Python內(nèi)存管理機(jī)制有關(guān)系:
>>> m = 3.14
>>> n = 3.14
>>> id(m) # m和n的值形同,但是地址不同
2013662155904
>>> id(n)
2013662157488
>>>
- 內(nèi)存回收機(jī)制:
問:如果我們不斷賦值,變量會(huì)不會(huì)太多導(dǎo)致內(nèi)存不夠?
回答:當(dāng)我們對變量進(jìn)行賦值時(shí),賦值對象的引用計(jì)數(shù)會(huì)加1,當(dāng)我們修改變量或者變量作用域小時(shí)時(shí)候,引用計(jì)數(shù)減1,當(dāng)對象的引用計(jì)數(shù)為0時(shí),python解釋器會(huì)釋放這個(gè)對象,對內(nèi)存進(jìn)行回收。
總結(jié):
掌握知識點(diǎn):
1:變量命名規(guī)則
2:變量的賦值形式
了解知識點(diǎn):
Python內(nèi)存管理