python中函式傳值傳的是引用還是拷貝

2021-09-24 05:53:44 字數 1055 閱讀 5369

其實直接討論這個問題沒什麼意義

對於不可變的型別, 數字,字串,tuple等型別

a = 3

b = 3

print(id(a))

print(id(b))

c = (1, 2)

d = (1, 2)

print(id(c))

print(id(d))

兩個相同的不可變型別的變數,其實指向的是同乙個物件。

140716764943456

140716764943456

2171425981768

2171425981768

[finished in 0.2s]

而對於可變型別,比如dict,list等

即使值是相同的,也會生成不同的物件

c = [1, 2]

d = [1, 2]

print(id(c))

print(id(d))

1937267647048

1937267647112

[finished in 0.1s]

所以對於python的函式而言,其實不論傳什麼進去,都是傳的引用,也就是變數的位址是相同的

這裡面剛開始函式中的區域性變數a和全域性變數a指向的是乙個相同的物件

但是區域性變數a 指向了乙個新的物件,但是並不影響全域性變數a的值,它還是指向原來的地方

下面是一種較為特殊的情況

因為函式中使用的是 +=  ,在python中+= 是原地修改,這意味著不會再新建乙個新的物件,而是直接修改全域性變數和區域性變數指向的那個物件的值。

所以最後全域性變數a的值變為了[1,2,3]

函式傳引數 python傳參是傳值還是傳引用

在此之前先來看看變數和物件的關係 python 中一切皆為物件,數字是物件,列表是物件,函式也是物件,任何東西都是物件。而變數是物件的乙個引用 又稱為名字或者標籤 物件的操作都是通過引用來完成的。例如,a 是乙個空列表物件,變數 a 是該物件的乙個引用 例1 輸出例2 輸出 id不一樣,所以說不是同...

Python 中函式傳參是傳值還是傳引用

直接簡單的例子 1 from ctypes import 2import os.path 3import sys4 5def test c 6print test before 7 print id c 8 c 2 9print test after 10 print id c 11returnc1...

python函式傳參是傳值還是傳引用?

首先還是應該科普下函式引數傳遞機制 傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...