Python參數(shù)傳遞對(duì)象的引用原理解析
大家都知道在python中,一切皆對(duì)象,變量也不再具有類型,變量僅僅是對(duì)象的一個(gè)引用,我們通常用變量來測(cè)類型,通常測(cè)得就是被這個(gè)變量引用得對(duì)象的類型。
python采用的是傳遞對(duì)象的引用,為了方便說明,我們來看一個(gè)例子:
test = [1]def change1(a): a = [2]def change2(a): a.append(3)change1(test)change2(test)print test
我們來看一下最后的輸出:
[1,3]
是不是有人誤以為是[2,3]?那你可得好好看接下來的內(nèi)容。
傳參傳的是對(duì)象的引用!!!!!!
所以在change1(a)函數(shù)中,我們知道形參a與test引用了同一塊內(nèi)存空間,然后a在函數(shù)內(nèi)部被修改了,它執(zhí)行了另一塊內(nèi)存空間,也就是存放[2]的地方,但是只是a的指向改變了,test的指向還是存放[1]的內(nèi)存空間。所以,接下來change2()對(duì)這塊內(nèi)存空間上放的值進(jìn)行了修改,就得到了我們最后看到的結(jié)果。
為了加深理解,我覺得有必要再舉一個(gè)類繼承的例子:
class Parent(object):x = 1 class Child1(Parent):pass class Child2(Parent):pass print Parent.x, Child1.x, Child2.xChild1.x = 2 print Parent.x, Child1.x, Child2.xParent.x = 3 print Parent.x, Child1.x, Child2.x輸出結(jié)果為:1 1 11 2 13 2 3
在繼承中,所有子類中的x原本都是引用的父類中x對(duì)象的存儲(chǔ)空間,但是child1中的x單獨(dú)指向了另一塊存儲(chǔ)空間。這樣以來,的到這個(gè)結(jié)果也就不意外了
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python中scrapy處理項(xiàng)目數(shù)據(jù)的實(shí)例分析2. Python中讀取文件名中的數(shù)字的實(shí)例詳解3. 在idea中為注釋標(biāo)記作者日期操作4. 通過Ajax方式綁定select選項(xiàng)數(shù)據(jù)的實(shí)例5. JSP頁面的靜態(tài)包含和動(dòng)態(tài)包含使用方法6. ASP.Net Core對(duì)USB攝像頭進(jìn)行截圖7. ASP.NET MVC使用Boostrap實(shí)現(xiàn)產(chǎn)品展示、查詢、排序、分頁8. .net如何優(yōu)雅的使用EFCore實(shí)例詳解9. 使用AJAX(包含正則表達(dá)式)驗(yàn)證用戶登錄的步驟10. ajax動(dòng)態(tài)加載json數(shù)據(jù)并詳細(xì)解析
