1. 程式人生 > 程式設計 >Python引數傳遞物件的引用原理解析

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 = 1
​ class Child1(Parent):
	pass
​ class Child2(Parent):
	pass
​ print Parent.x,Child1.x,Child2.x
Child1.x = 2
​ print Parent.x,Child2.x
Parent.x = 3
​ print Parent.x,Child2.x​
輸出結果為:
1 1 1
1 2 1
3 2 3

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。