其實直接討論這個問題沒什麼意義
對於不可變的型別, 數字,字串,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 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...