python參數傳遞:對象的引用


  大家都知道在python中,一切皆對象,變量也不再具有類型,變量僅僅是對象的一個引用,我們通常用變量來測類型,通常測得就是被這個變量引用得對象的類型。 

python采用的是傳遞對象的引用,為了方便說明,我們來看一個例子:

test = [1] def change1(a): a = [2] def change2(a): a.append(3) change1(test) change2(test) print test

我們來看一下最后的輸出: 
[1,3] 
是不是有人誤以為是[2,3]?那你可得好好看接下來的內容。 
傳參傳的是對象的引用!!!!!! 
所以在change1(a)函數中,我們知道形參a與test引用了同一塊內存空間,然后a在函數內部被修改了,它執行了另一塊內存空間,也就是存放[2]的地方,但是只是a的指向改變了,test的指向還是存放[1]的內存空間。所以,接下來change2()對這塊內存空間上放的值進行了修改,就得到了我們最后看到的結果。 
為了加深理解,我覺得有必要再舉一個類繼承的例子:

class Parent(object): x = 1class Child1(Parent): passclass Child2(Parent): passprint Parent.x, Child1.x, Child2.x Child1.x = 2print Parent.x, Child1.x, Child2.x Parent.x = 3print Parent.x, Child1.x, Child2.x​ 輸出結果為: 1 1 1

1 2 1

3 2 3

在繼承中,所有子類中的x原本都是引用的父類中x對象的存儲空間,但是child1中的x單獨指向了另一塊存儲空間。這樣以來,的到這個結果也就不意外了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM