python中的引數傳遞

2021-10-10 11:41:36 字數 1299 閱讀 5247

begin:

前面在介紹python的六大資料型別的時候提到根據資料可變和不可變進行的資料型別分類:

python3 的六個標準資料型別中:

不可變資料(3 個):number(數字)、string(字串)、tuple(元組);

可變資料(3 個):list(列表)、dictionary(字典)、set(集合)。

python中的函式引數既支援按值呼叫,也支援按引用呼叫。這裡需要再次強調:python中萬物皆物件,python中的變數是物件的引用,變數中儲存的是記憶體位址。當函式被呼叫時,直譯器會檢視傳入的變數(記憶體位址)指的那個指的型別,如果是乙個可變型別的值,就按照引用傳遞變數;如果是乙個非可變型別的值,就考慮按照值傳遞變數。

對於不可變資料型別(數字、字串、元組),函式對變數的任何修改都是函式私有的,不會反映到函式外面,由於這些變數是不可變的,所以不能修改,如:

對於可變資料型別(列表、字典、集合),傳入函式中的變數,函式內部的修改都會反映到函式外面,即最初始的變數會受到影響,畢竟這些初始的變數是可變型別,如:

例外:

這裡,對於可變資料型別,傳入引數並沒有改變函式外面的值,原因在於語句:a = a+[『a』,『b』,『c』]

首先,傳入的變數,先執行a+[『a』,『b』,『c』],所產生的新的變數(新物件的引用),重新賦值給原先的變數a,覆蓋其原先的引用,導致原先的變數a與外面初始變數之間的聯絡斷了,這時候,a變數對應的物件引用已經和原先的物件引用不同了,那麼函式裡面的a 的改變就和原先的變數沒有關係了,所以並不能影響到函式外面的變數。

也許這樣看會明白一些:

函式裡面的變數a+[『a』,『b』,『c』]實際上是[1,2,3,『a』,『b』,『c』]這個值,而a=a+[『a』,『b』,『c』]等價於a=[1,2,3,『a』,『b』,『c』],由於[1,2,3]對應的記憶體位址和[1,2,3,『a』,『b』,『c』]對應的記憶體位址不是同乙個,對於函式裡面的變數a,記憶體會重新開闢乙個空間作為變數a的記憶體位址,相當於乙個新的變數,因此這裡函式裡面的a後續無論如何改變都不會影響到外面的那個變數a的值。

end.

python中的引數傳遞

我們知道c語言中只有值傳遞 位址也是值 c 中額外有引用傳遞,那麼在python中的引數是如何傳遞的呢,要理解這一點,我們就需要知道python傳遞的到底是什麼,在c c 中有變數的概念,但是在python中是沒有這個概念的,在python的世界中,萬物皆物件,我們可以通過名字來操控這些物件,先來解...

Python 中引數的傳遞

學習 python 中,對 python 中的引數傳遞存有疑惑,想知道傳遞的是乙份拷貝還是引用位址,於是測試一番。個人理解,如有誤請指出。print 列表 def listchanged a 列表 同一引用 a 0 2 print id a a 1 print 呼叫函式前 str a listcha...

python 引數傳遞 Python 引數傳遞

python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...