Python參數(shù)傳遞對(duì)象的引用原理解析
大家都知道在python中,一切皆對(duì)象,變量也不再具有類型,變量?jī)H僅是對(duì)象的一個(gè)引用,我們通常用變量來(lái)測(cè)類型,通常測(cè)得就是被這個(gè)變量引用得對(duì)象的類型。
python采用的是傳遞對(duì)象的引用,為了方便說(shuō)明,我們來(lái)看一個(gè)例子:
test = [1] def change1(a): a = [2] def change2(a): a.append(3) change1(test) change2(test) print test
我們來(lái)看一下最后的輸出:
[1,3]
是不是有人誤以為是[2,3]?那你可得好好看接下來(lái)的內(nèi)容。
傳參傳的是對(duì)象的引用!?。。。?!
所以在change1(a)函數(shù)中,我們知道形參a與test引用了同一塊內(nèi)存空間,然后a在函數(shù)內(nèi)部被修改了,它執(zhí)行了另一塊內(nèi)存空間,也就是存放[2]的地方,但是只是a的指向改變了,test的指向還是存放[1]的內(nèi)存空間。所以,接下來(lái)change2()對(duì)這塊內(nèi)存空間上放的值進(jìn)行了修改,就得到了我們最后看到的結(jié)果。
為了加深理解,我覺(jué)得有必要再舉一個(gè)類繼承的例子:
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 輸出結(jié)果為: 1 1 1 1 2 1 3 2 3
在繼承中,所有子類中的x原本都是引用的父類中x對(duì)象的存儲(chǔ)空間,但是child1中的x單獨(dú)指向了另一塊存儲(chǔ)空間。這樣以來(lái),的到這個(gè)結(jié)果也就不意外了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中內(nèi)置庫(kù)csv的使用及說(shuō)明
這篇文章主要介紹了python中內(nèi)置庫(kù)csv的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Python已正確安裝Numpy但無(wú)法調(diào)用背后的奧秘及解決辦法
這篇文章主要給大家介紹了關(guān)于Python已正確安裝Numpy但無(wú)法調(diào)用背后的奧秘及解決辦法,文中提供了多種可能的原因和解決方案,同時(shí)還給出了預(yù)防措施,幫助開(kāi)發(fā)者避免未來(lái)出現(xiàn)類似問(wèn)題,需要的朋友可以參考下2024-12-12
用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池
這篇文章主要介紹了用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池,通過(guò)這個(gè)小程序可以幫助更好地理解Python中線程的運(yùn)行機(jī)制,需要的朋友可以參考下2015-04-04
python中from module import * 的一個(gè)坑
from module import *把module中的成員全部導(dǎo)到了當(dāng)前的global namespace,訪問(wèn)起來(lái)就比較方便了。當(dāng)然,python style一般不建議這么做,因?yàn)榭赡芤餹ame conflict。2014-07-07
如何在python中實(shí)現(xiàn)隨機(jī)選擇
這篇文章主要介紹了如何在python中實(shí)現(xiàn)隨機(jī)選擇,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
python入門:argparse淺析 nargs=''+''作用
這篇文章主要介紹了python入門:argparse淺析 nargs='+'作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
python-opencv獲取二值圖像輪廓及中心點(diǎn)坐標(biāo)的代碼
今天小編就為大家分享一篇python-opencv獲取二值圖像輪廓及中心點(diǎn)坐標(biāo)的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python項(xiàng)目打包成apk或者其他端的應(yīng)用程序
本文主要介紹了使用Kivy和Buildozer將Python項(xiàng)目打包成Android APK文件的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11

