python函數參數是值傳遞還是引用傳遞:取決於對象內容可變不可變

函數參數傳遞本質上和變量整體複製一樣,只是兩個變量分別爲形參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的參數是通過值來傳遞的

如果變量是可變對象(列表或者圖形對象),返回到調用程序後,該對象會呈現被修改後的狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章