函數參數傳遞本質上和變量整體複製一樣,只是兩個變量分別爲形參a和實參b。那麼,a=b後,a變了,b值是否跟着變呢?這取決於對象內容可變不可變
首先解釋一下,什麼是python對象的內容可變不可變?
python的變量是無類型的,如n=1 #變量n無類型(n相當於指針),其指向int數據類型的值,這個值是int類型。
所以,python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。
舉個列子,
不可變如,a=5後,a=10,這裏實際是新生成一個int值對象10,再讓a指向它,而5被丟棄,不是改變a的值,相當於新生成了a。
而可變如,la=[1,2,3,4]後,la[2]=5則是將list la的第二個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。
那麼,python函數的參數傳遞:
可變類型,則類似c++的引用,如list、dict。如fun(la),則是將la真正的傳過去,修改後fun外部的la也會受影響
而不可變類型,則類似c++的值傳遞,如int。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在fun(a)內部修改a的值,只是修改另一個複製的對象,不會影響a本身
同樣的道理,python變量複製也是一樣,a=b:
變量間複製,可變對象是引用,不可變是值copy(新生成值空間,不是變量對象空間)
樣例代碼如下:
a={1:'a',2:'b',3:'c'}
b=a
a[4]='d'
print a,b
#輸出:{1: 'a', 2: 'b', 3: 'c', 4: 'd'} {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
a=10
b=a
a=6
print a,b
#輸出: 6 10
Python的參數是通過值來傳遞的
如果變量是可變對象(列表或者圖形對象),返回到調用程序後,該對象會呈現被修改後的狀態