8.1-什么是變量:
如果庇忌,我們想把數(shù)據(jù)存到內(nèi)存里,以便在程序中多次使用舰褪,就需要通過(guò)變量來(lái)存儲(chǔ)數(shù)據(jù)皆疹,然后在需要的時(shí)候通過(guò)變量的名字來(lái)提取數(shù)據(jù)。
變量就是編程中最基本的存儲(chǔ)單位占拍,會(huì)暫時(shí)的儲(chǔ)存你放進(jìn)去的東西(即代指內(nèi)存里某個(gè)地址中保存的內(nèi)容)略就。
在計(jì)算機(jī)程序中捎迫,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型表牢。
在python中我們可以把各種類型的數(shù)據(jù)賦值給同一個(gè)變量窄绒,比如:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#s1 存儲(chǔ)的內(nèi)容為字符串"hello world"
s1 = "hello world"
print(type(s1))
print(s1)
print("-----" * 8)
#s1 存儲(chǔ)的內(nèi)容變?yōu)檎?123
s1 = 123
print(type(s1))
print(s1)
運(yùn)行結(jié)果:
Python能自由改變變量類型的特征被稱為動(dòng)態(tài)類型。并不是所有的語(yǔ)言都支持動(dòng)態(tài)類型崔兴。在靜態(tài)類型的語(yǔ)言中彰导,變量有事先說(shuō)明好的類型。特定類型的數(shù)據(jù)必須存入特定類型的變量敲茄。相比于靜態(tài)類型位谋,動(dòng)態(tài)類型顯得更加靈活便利。
8.2-變量的命名規(guī)范:
- 變量名只能是是大小寫英文字母堰燎、數(shù)字和_組成掏父。
- 不能用數(shù)字開頭。
- 以下關(guān)鍵字(python內(nèi)部的關(guān)鍵字)不能聲明為變量名秆剪。
['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']
在 Python3 中赊淑, exec 不再是關(guān)鍵字,但 nonlocal 是一個(gè)新的關(guān)鍵字鸟款。
注:變量對(duì)大小寫敏感
8.3-變量賦值:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
pwd = "root123"
user = "root"的過(guò)程:python解釋器會(huì)在內(nèi)存中創(chuàng)建一個(gè)"root"字符串膏燃,將"root"存儲(chǔ)在一個(gè)內(nèi)存空間里,然后user變量指向存儲(chǔ)"root"字符串的內(nèi)存地址何什。
在內(nèi)存中的表示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
#將變量pwd指向了user變量所指向的地址
pwd = user
在內(nèi)存中的表示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
user = "root"
#將變量pwd指向了user變量所指向的地址
pwd = user
#將變量user的指向改為"root123"组哩,但變量pwd并沒(méi)有改變
user = "root123"
在內(nèi)存中的表示:
8.4-垃圾回收機(jī)制:
在Python基礎(chǔ)中還有一個(gè)比較重要的概念就是垃圾回收機(jī)制,下面我們通過(guò)代碼來(lái)驗(yàn)證:
>>> a = 1
>>> b = a
>>> id(a),id(b)
(1731718960, 1731718960)
首先我們聲明了一個(gè)變量a处渣,a等于1伶贰,然后又聲明了變量b,b等于a罐栈,其實(shí)就是變量b指向了a所指向的內(nèi)存地址黍衙, 通過(guò)id()內(nèi)置函數(shù)我們可以清楚地看到這兩個(gè)變量指向的是同一塊內(nèi)存區(qū)域。
再繼續(xù)下列實(shí)例代碼:
>>> name = "root"
>>> name = "root123"
>>> name
'root123'
通過(guò)上面這個(gè)實(shí)例荠诬,可以清楚的理解到垃圾回收機(jī)制是如何工作的:
- 創(chuàng)建一個(gè)變量 name 琅翻,指向 "root" 的內(nèi)存地址;
- 如果 "root" 這個(gè)值之前沒(méi)有在內(nèi)存中創(chuàng)建柑贞,那么現(xiàn)在創(chuàng)建它方椎,并讓這個(gè)內(nèi)存地址的引用數(shù)+1,此時(shí)等于1钧嘶;
- 然后對(duì)變量 name 重新賦值棠众,讓其指向 "root123" 的內(nèi)存地址;
- 那么此時(shí) "root" 值的引用數(shù)現(xiàn)在變成了0有决,當(dāng)python一旦檢測(cè)到某個(gè)內(nèi)存地址的引用數(shù)等于0時(shí)闸拿,就會(huì)把這個(gè)內(nèi)存地址給刪掉空盼,從而釋放內(nèi)存;
- 最后變量 name 指向了 "root123" 的內(nèi)存地址新荤,所以 name 就等于 "root123"揽趾。