1. 程式人生 > >python 函式引數作為引用時

python 函式引數作為引用時

作為引數傳入函式中,執行結束後,實參到底會不會影響

1. 各種型別資料,引數名到底對應什麼?

如果你學過c或者c++, 你應該知道引用這個東西,我簡單的理解為,如果這個引數名上的地址,存的不是它的值,而是它對應值得位置,那就是引用。從上圖不難發現,python常用資料型別,其中引數是引用的為,類例項,複數,列表,集合,元組,字典,它們的引數名,實際上對應的都是引用。

2. 函式內對引數進行改變,會影響實參麼?

函式棧裡頭會存放函式執行過程中的相關資訊,執行函式f的時候,f函式有自己形參a,a的值就是實參a的值,也就是3,對a進行+1操作,也就是對形參進行加一操作,不影響實參,自然,函式執行後,也不會改變函式外a的值的

同上,執行函式f的時候,f函式自己形參a值就是實參a的值,也就是對列表空間的引用,此時,對形參操作,就相當於對實參操作,但是改變了形參就是改變了實參。

3. 最終結論

根據上面的演示,是不是是說,只要引數存的就是變數的值,在函式中對引數進行操作,函式結束,引數也不會變化,相反,如果引數存的是變數的引用,在函式中對引數進行操作,就是對原引數的操作,函式結束,原引數也隨之變化了。

!!!!通體是對的,但是有兩個特例!!!!!

一個是元組,一個是複數。

你瞅瞅! 對元組和複數進行變更,他並不是在原地址上進行操作,而是新建立了一個元素,然後賦值給變數名。這個過程就像vector擴充,新建一片空間,把舊的都複製過去,然後把新地址給變數。上圖!

元組,在函式內進行擴充的時候,f函式形參a將指向一片新的地方。

複數,在函式內進行操作變化的時候,f函式形參a將指向一片新的地方。

4.所以

集合(set),列表(list),字典(dict),類示例,作為引數傳入函式中,在函式中進行值的操作,會對實參有改變,其他資料型別,不會有改變!!

歡迎大家指正