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在函數內部被修改了,它執(zhí)行了另一塊內存空間,也就是存放[2]的地方,但是只是a的指向改變了,test的指向還是存放[1]的內存空間。所以,接下來change2()對這塊內存空間上放的值進行了修改,就得到了我們最后看到的結果。
為了加深理解,我覺得有必要再舉一個類繼承的例子:
class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 輸出結果為: 1 1 1 1 2 1 3 2 3
在繼承中,所有子類中的x原本都是引用的父類中x對象的存儲空間,但是child1中的x單獨指向了另一塊存儲空間。這樣以來,的到這個結果也就不意外了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python已正確安裝Numpy但無法調用背后的奧秘及解決辦法
這篇文章主要給大家介紹了關于Python已正確安裝Numpy但無法調用背后的奧秘及解決辦法,文中提供了多種可能的原因和解決方案,同時還給出了預防措施,幫助開發(fā)者避免未來出現(xiàn)類似問題,需要的朋友可以參考下2024-12-12
python中from module import * 的一個坑
from module import *把module中的成員全部導到了當前的global namespace,訪問起來就比較方便了。當然,python style一般不建議這么做,因為可能引起name conflict。2014-07-07
python入門:argparse淺析 nargs=''+''作用
這篇文章主要介紹了python入門:argparse淺析 nargs='+'作用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python-opencv獲取二值圖像輪廓及中心點坐標的代碼
今天小編就為大家分享一篇python-opencv獲取二值圖像輪廓及中心點坐標的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

