函式的引用傳遞:對於函式輸入的引數物件,函式在執行過程中對物件本身進行操作;在執行結束後引數物件有可能發生改變函式的值傳遞:對於函式輸入的引數物件,函式執行中首先生成物件的乙個副本,並在執行過程中對副本進行操作。執行結束後物件不發生改變。
python中不可選擇函式是引用傳遞(pass by reference)或者值傳遞(pass by value)。具體而言,python的函式所使用的方式是pass by assignment,屬於引用傳遞還是值傳遞由物件本身的性質所決定。
之前有博文認為python的函式引數屬於引用傳遞還是值傳遞由物件本身的性質所決定,如果傳入物件為可變物件,如list或dict,則可以在函式中修改物件元素值。如果為不可變物件,如tuple和str,則無法修改物件,其實這是一種誤解。事實上,即使是list或dict也無法在函式內使用=直接對其賦值。
如下例:
a =[1,2]
def clear(a):
a =
clear(a)
print(a) #a的值仍為[1,2]
而以下函式則可清空list:
a = [1,2]
def clear(a):
while a:
a.pop()
clear(a)
print(a) #a的值為
python的函式在其內部僅能呼叫引數物件本身的方法。若引數物件有改變自身的方法(如list,dict或者其它)則引數物件有可能在函式內部被改變;若引數物件沒有改變自身的方法,則函式無法修改引數物件的值。 python值傳遞和引用傳遞
關於值傳遞和引用傳遞,綜合目前各種的說法,可以得出這樣的結論 可變物件為引用傳遞,不可變物件為值傳遞。但是python中一切事物均視為物件,個人覺得值傳遞和物件傳遞只不過是物件引用的兩種表現。如果是可變物件的引用 比如字典 列表 就能修改物件的原始值,相當於通過傳引用來傳遞物件,不可變物件 如數字 ...
值傳遞和引用傳遞
幾乎每種語言都有值傳遞和引用傳遞.下面是我的一些曲解,只講現象,不涉及到任何的原理,主要是鬧著玩的.a 新交了個女朋友b.有一天他女朋友b看見a在吃冰激凌,b想吃,但是a是個 座有點小潔癖,不想讓b吃,於是給b買了個新的冰激凌說你吃這個吧,別碰我嘴裡這個.這就是值傳遞.a和b的值沒有任何關係,他們一...
值傳遞和引用傳遞
1.什麼是值傳遞和引用傳遞 值傳遞 方法呼叫時,實際引數的值copy乙份傳遞給形式引數,此時,有兩個相等的數值分別儲存於不同的記憶體位址上,因此,後面的方法中都是對形參位址上的數值進行修改。引用傳遞 方法呼叫時,實際引數的值 也就是位址 copy乙份傳遞給形式引數,此時,形參和實參的引用都指向同一儲...