小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python中變量傳遞時(shí)的引用和賦值

 浸心閣 2015-03-26

導(dǎo)讀:Python中不明確區(qū)分賦值和應(yīng)用,一般對(duì)靜態(tài)變量的傳遞為賦值,對(duì)動(dòng)態(tài)變量的傳遞為引用。(注,對(duì)靜態(tài)變量首次傳遞時(shí)也是應(yīng)用,當(dāng)需要修改靜態(tài)變量時(shí),因?yàn)殪o態(tài)變量不能改變,所以需要生成一個(gè)新的空間存儲(chǔ)數(shù)據(jù))個(gè)人覺得分清楚規(guī)則即可比較容易的區(qū)別。

Python中不明確區(qū)分賦值和應(yīng)用,一般對(duì)靜態(tài)變量傳遞為賦值,對(duì)動(dòng)態(tài)變量傳遞引用(注,對(duì)靜態(tài)變量首次傳遞時(shí)也是應(yīng)用,當(dāng)需要修改靜態(tài)變量時(shí),因?yàn)殪o態(tài)變量不能改變,所以需要生成一個(gè)新的空間存儲(chǔ)數(shù)據(jù))個(gè)人覺得分清楚規(guī)則即可比較容易的區(qū)別。


字符串,整數(shù),元組均為靜態(tài)變量

列表,字典為動(dòng)態(tài)變量


以下示例在Python 2.7環(huán)境下演示,id()函數(shù)可顯示變量內(nèi)存地址

例1:整數(shù)傳遞

a = 4
print id(a) #id函數(shù)顯示變量內(nèi)存地址
b = a
print id(b)
b = 6
print id(b)
>>>
19691376
19691376
19691328

說(shuō)明,
1.a被賦值4
2.b是a的引用
3.b改變,因?yàn)榇藭r(shí)b指向的是一個(gè)靜態(tài)變量4,所以給b賦值時(shí),先將6存入一個(gè)和4不同的地址,然后b再指向6的地址

例2:變量傳遞

a = "mm"
print id(a)
b = a
print id(b)
b = "nn"
print id(b)
>>>
37313312
37313312
37313352

說(shuō)明:

1.a為一個(gè)指向字符串的變量

2.a傳遞給b時(shí),b為一個(gè)引用指向和a相同的地址

3.當(dāng)b被賦給一個(gè)新字符串值時(shí),因?yàn)閎指向的"mm"是一個(gè)靜態(tài)變量,所以生成一個(gè)新空間存放"nn",然后b指向"nn"


例3:列表的地址存儲(chǔ)(以下為個(gè)人理解,未查源代碼,如有錯(cuò)誤請(qǐng)指正)

>>>

說(shuō)明:

從輸出的1,2,3行看出,a的地址>a[0]的地址>a[1]的地址,而且a[0]和a[1]地址間相差較遠(yuǎn),所以python中的列表絕對(duì)不是c中的數(shù)組,應(yīng)該是個(gè)鏈表。(從python列表具有append()函數(shù)也可以看出)

命令第5行a傳遞給b時(shí),從輸出6,7行看,a和b指向了同一個(gè)地址,b為a的一個(gè)引用,a,b的值應(yīng)該是指向鏈表頭的指針。

命令第6行,b[0]值發(fā)生改變,從輸出4,5行看,a,b內(nèi)容同時(shí)都發(fā)生改變,從輸出6,7行a,b指向的還是同一個(gè)地址,從輸出7行看a[0]的地址發(fā)生了改變,所以應(yīng)該時(shí)鏈表的第一個(gè)節(jié)點(diǎn)被替換(即使變量類型兼容),所以也可以理解為什么python可以不關(guān)注變量類型。輸出第8行為a[1]的地址,沒有發(fā)生改變

命令第13行,b[1]被改變,分析同上,a,b指向的同一個(gè)鏈表的尾元素被替換


例4:列表傳遞引用

a = [4]
print id(a)
b = a
print id(b)
b[0] = 6
print id(b)
>>>
43351720
43351720
43351720

說(shuō)明;

同上例理解


例5:列表賦值

a = [4]
print id(a)
b = a[:]
print id(b)
b[0] = 8
print id(b)
>>>
22863528
23030888
23030888

說(shuō)明:

1.a指向一個(gè)動(dòng)態(tài)變量列表

2.b得到a列表的一個(gè)copy存儲(chǔ)在一個(gè)新的空間,b指向一個(gè)新地址(b = a 和b=a[:]的區(qū)別可從 ,b=a,b=a[1:3]的區(qū)別進(jìn)行理解)

3.b的第一個(gè)元素賦值8,不影響a


例6:字典引用

a = {"i":99}
print id(a)
b = a
print id(b)
b["o"] = 8
print id(b)
print "a=", a
print "b=", b
>>>
28841616
28841616
28841616
a= {'i': 99, 'o': 8}
b= {'i': 99, 'o': 8}

說(shuō)明:

1.a指向一個(gè)動(dòng)態(tài)變量

2.b為a的一個(gè)引用

3.b新增了一個(gè)變兩,a也新增


例7:字典賦值

a = {"i":99}
print id(a)
b = a.copy()
print id(b)
b["o"] = 8
print id(b)
print "a=", a
print "b=", b
>>>
16033424
16063424
16063424
a= {'i': 99}
b= {'i': 99, 'o': 8}

說(shuō)明:

1.a指向一個(gè)動(dòng)態(tài)變量

2.b為a的一個(gè)拷貝,指向一個(gè)新地址

3.b新增了一個(gè)變量,a不變

例8:不同類型變量傳遞

a = "mm"
print id(a)
b = a
print id(b)
b = 8
print id(b)
print "a=", a
print "b=", b

>>>

11687096
11687096
10692368
a= mm
b= 8

說(shuō)明:

1.a指向一個(gè)靜態(tài)

2.b為a的一個(gè)應(yīng)用,指向和a相同的地址

3.b發(fā)生了改變,指向一個(gè)新的數(shù)據(jù)地址


上一篇PYTHON 與C相互交互調(diào)用實(shí)例解析 下一篇Python學(xué)習(xí)筆記5--常見筆面試題整理

總結(jié):a = "mm"print id(a)b = aprint id(b)b = 8print id(b)print "a=", aprint "b=", b

文章評(píng)論 以下網(wǎng)友留言只代表其個(gè)人觀點(diǎn),不代表本網(wǎng)站的觀點(diǎn)和立場(chǎng)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多