python的引數傳遞是值傳遞還是引用傳遞?

2022-08-22 23:00:16 字數 2081 閱讀 7526

函式引數傳遞機制,傳值和引用的是什麼意思?

函式引數傳遞機制問題在本質上是呼叫函式(過程)和被呼叫函式(過程)在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種:值傳遞和引用傳遞。

值傳遞(passl-by-value)過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在堆疊中開闢了記憶體空間來存放由主調函式放進來的實參的值,從而想成為了實參的乙個副本。值傳遞的特點是被調函式對形勢引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。

引用傳遞(pass-by-reference)過程中,被調函式的形式引數雖然也作為區域性變數在堆疊中開闢了記憶體空間,但這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過堆疊中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做任何的操作都影響了主調函式中的實參變數。

在python中,可以有多個引用同時指向乙個記憶體。

python不允許程式設計師選擇採用傳值還是傳引用。python引數傳遞採用的肯定是「傳物件引用」的方式。這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件(字典、列表)的引用,就能修改物件的原始值--相當於『傳引用』來傳遞物件。如果函式收到的是乙個不可變物件(數字、字元或元組)的引用,就不能直接修改原始物件--相當於通過『值傳遞』來傳遞物件。

sample:

1

defadd_one(value):

2 value += 1

3return

value45

def7

returnl8

9 a = 1

10print

(a)11

print

(add_one(a))

12print

(a)13

14 b = [1]

15print

(b)16

print

17print(b)

results:12

1[1]

[1, 2]

[1, 2]

函式引數傳遞機制,傳值和引用的是什麼意思?

函式引數傳遞機制問題在本質上是呼叫函式(過程)和被呼叫函式(過程)在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種:值傳遞和引用傳遞。

值傳遞(passl-by-value)過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在堆疊中開闢了記憶體空間來存放由主調函式放進來的實參的值,從而想成為了實參的乙個副本。值傳遞的特點是被調函式對形勢引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。

引用傳遞(pass-by-reference)過程中,被調函式的形式引數雖然也作為區域性變數在堆疊中開闢了記憶體空間,但這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過堆疊中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做任何的操作都影響了主調函式中的實參變數。

在python中,可以有多個引用同時指向乙個記憶體。

python不允許程式設計師選擇採用傳值還是傳引用。python引數傳遞採用的肯定是「傳物件引用」的方式。這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件(字典、列表)的引用,就能修改物件的原始值--相當於『傳引用』來傳遞物件。如果函式收到的是乙個不可變物件(數字、字元或元組)的引用,就不能直接修改原始物件--相當於通過『值傳遞』來傳遞物件。

sample:

1

defadd_one(value):

2 value += 1

3return

value45

def7

returnl8

9 a = 1

10print

(a)11

print

(add_one(a))

12print

(a)13

14 b = [1]

15print

(b)16

print

17print(b)

results:12

1[1]

[1, 2]

[1, 2]

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

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

Python中引數是引用傳遞,還是值傳遞

目前在使用python做開發,有乙個多月了,但是對python的引用傳遞和值傳遞,理解的不是很清楚,前幾天做乙個單子,其中將乙個引數作為初始化值傳遞給乙個介面,結果出了bug。問題主要是這樣的,客戶端做乙個介面,介面上面有三個框,主要是將候選字拖到裡面,那麼在服務端每個人都對應這樣乙個框,也就是需要...

python的引數傳遞是值傳遞還是引用傳遞??

函式引數傳遞機制,傳值和引用的是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在堆疊中開闢了記憶體...