值傳遞機制和引用傳遞

2022-07-06 14:00:27 字數 1576 閱讀 9632

1.值傳遞:所謂值傳遞,實際上就是將實際引數值的副本(複製品)傳入函式,而引數本身不會受到任何影響。

def

swap(a , b) :

#下面**實現a、b變數的值交換

a, b =b, a

print("

swap函式裡,a的值是

", a,

";b的值是

", b)# 9 6

a = 6b = 9swap(a , b)

print("

交換結束後,變數a的值是

", a ,

";變數b的值是

", b) # 6 9

2.引用傳遞:如果實際引數的資料型別是可變物件(列表、字典),則函式引數的傳遞方式將採用引用傳遞方式。需要注意的是,引用傳遞方式的底層實現,採用的依然還是值傳遞的方式。

def

swap(dw):

#下面**實現dw的a、b兩個元素的值交換

dw['

a'], dw['

b'] = dw['

b'], dw['a'

]

print("

swap函式裡,a元素的值是

",dw['

a'], "

;b元素的值是

", dw['

b']) #

9 6dw =

swap(dw)

print("

交換結束後,a元素的值是

",dw['

a'], "

;b元素的值是

", dw['

b']) #

9 6

在呼叫 swap() 函式時,dw 變數作為引數傳入 swap() 函式,這裡依然採用值傳遞方式:把主程式中 dw 變數的值賦給 swap() 函式的 dw 形參,從而完成 swap() 函式的 dw 引數的初始化。值得指出的是,主程式中的 dw 是乙個引用變數(也就是乙個指標),它儲存了字典物件的位址值,當把 dw 的值賦給 swap() 函式的 dw 引數後,就是讓 swap() 函式的 dw 引數也儲存這個位址值,即也會引用到同乙個字典物件。

這種引數傳遞方式是不折不扣的值傳遞方式,系統一樣複製了dw 的副本傳入 swap() 函式。但由於 dw 只是乙個引用變數,因此系統複製的是 dw 變數,並未複製字典本身。

當程式在 swap() 函式中操作 dw 引數時,由於 dw 只是乙個引用變數,故實際操作的還是字典物件。此時,不管是操作主程式中的 dw 變數,還是操作 swap() 函式裡的 dw 引數,其實操作的都是它們共同引用的字典物件,它們引用的是同乙個字典物件。因此,當在 swap() 函式中交換 dw 引數所引用字典物件的 a、b 兩個元素的值後,可以看到在主程式中 dw 變數所引用字典物件的 a、b 兩個元素的值也被交換了。

通過上面介紹可以得出如下兩個結論:

不管什麼型別的引數,在 python 函式中對引數直接使用「=」符號賦值是沒用的,直接使用「=」符號賦值並不能改變引數。

如果需要讓函式修改某些資料,則可以通過把這些資料報裝成列表、字典等可變物件,然後把列表、字典等可變物件作為引數傳入函式,在函式中通過列表、字典的方法修改它們,這樣才能改變這些資料。

值傳遞和引用傳遞

幾乎每種語言都有值傳遞和引用傳遞.下面是我的一些曲解,只講現象,不涉及到任何的原理,主要是鬧著玩的.a 新交了個女朋友b.有一天他女朋友b看見a在吃冰激凌,b想吃,但是a是個 座有點小潔癖,不想讓b吃,於是給b買了個新的冰激凌說你吃這個吧,別碰我嘴裡這個.這就是值傳遞.a和b的值沒有任何關係,他們一...

值傳遞和引用傳遞

1.什麼是值傳遞和引用傳遞 值傳遞 方法呼叫時,實際引數的值copy乙份傳遞給形式引數,此時,有兩個相等的數值分別儲存於不同的記憶體位址上,因此,後面的方法中都是對形參位址上的數值進行修改。引用傳遞 方法呼叫時,實際引數的值 也就是位址 copy乙份傳遞給形式引數,此時,形參和實參的引用都指向同一儲...

值傳遞和引用傳遞

定義 通過建立乙個實際引數的副本,再傳遞給方法的形式引數,在main自身並不會被使用。這個在我們第一次使用編寫交換數的方法時,基本都會遇見,當我呼叫a,b兩個變數時,通過交換方法交換他們的位置,但是沒用,這就是值傳遞,乙個坑 public class switchnum switchnum a,b ...