Python引數傳遞物件的引用原理解析

2022-09-28 03:27:13 字數 1111 閱讀 5352

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

python採用的是傳遞物件的引用,為了方便說明,我們來看乙個例子:

qsmbpkrybtest = [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(parewww.cppcns.comnt):

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引數傳遞物件的引用原理解析

本文位址: /jiaoben/python/313959.html

python引數傳遞 物件的引用

大家都知道在python中,一切皆物件,變數也不再具有型別,變數僅僅是物件的乙個引用,我們通常用變數來測型別,通常測得就是被這個變數引用得物件的型別。python採用的是傳遞物件的引用,為了方便說明,我們來看乙個例子 test 1 defchange1 a a 2 defchange2 a chan...

Python引數傳遞 引用傳遞 值傳遞

值傳遞 方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。a1 520 a2 a1 print a1 520 print a2 520 a2 a1 1 print a2 521 print a1 520 引用傳遞 也稱位址傳遞,在方法呼叫時,實際上是把引...

python按引用傳遞引數

本文是python入門到函式遇到的疑惑。下面一段是基礎教程的原文python函式。所有引數 自變數 在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如 python view plain copy usr bin python 可寫函式說...