值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。
>>> a1 = 520
>>> a2 = a1
>>>
print a1
520>>>
print a2
520>>> a2 = a1 + 1
>>>
print a2
521>>>
print a1
520>>>
引用傳遞:也稱位址傳遞,在方法呼叫時,實際上是把引數的引用(傳的是位址,而不是引數的值)傳遞給方法中對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方法執行中形式引數值的改變將會影響實際引數的值。
>>> a1 = [1,2]
>>> a2 = a1
>>>
print a1
[1, 2, 3]
>>>
print a2
[1, 2, 3]
>>>
在python中,數字、字元或者元組等不可變物件型別都屬於值傳遞,而字典dict或者列表list等可變物件型別屬於引用傳遞。
如果要想修改新賦值後原物件不變,則需要用到python的copy模組,即物件拷貝。物件拷貝又包含淺拷貝和深拷貝。下面用例子來說明
import
copy
l1 = [[1,2],3]
l2 = copy.copy(l1)
l3 = copy.deepcopy(l1)
(4)(5)
(6)
最後的結果:
l1 = [[1, 2, 5], 3]
l2 = [[1, 2, 5], 3, 4]
l3 = [[1, 2, 6], 3]
從上例可以看出,copy.copy屬於淺拷貝,拷貝的是第一層list,而copy.deepcopy屬於深拷貝,對list所有子元素都進行深拷貝。 Python按值傳遞引數和按引用傳遞引數
python按值傳遞引數和按引用傳遞引數 按值傳遞引數 使用乙個變數的值 數字,字串 放到實參的位置上 注 傳遞過去的是變數的副本,無論副本在函式中怎麼變,變數的值都不變 傳遞常量 傳遞常量 定義乙個函式,輸出 歡迎,接收到的引數 name defhuanying name print 歡迎 nam...
Python中引數是引用傳遞,還是值傳遞
目前在使用python做開發,有乙個多月了,但是對python的引用傳遞和值傳遞,理解的不是很清楚,前幾天做乙個單子,其中將乙個引數作為初始化值傳遞給乙個介面,結果出了bug。問題主要是這樣的,客戶端做乙個介面,介面上面有三個框,主要是將候選字拖到裡面,那麼在服務端每個人都對應這樣乙個框,也就是需要...
值傳遞與引用傳遞 引數型別
根據儲存方式不同,我們將資料型別分為值型別和引用型別。值型別 基本資料型別 int float double boolean long 列舉 結構。儲存在棧當中的,提取資料快,但是分配空間多,耗資源,建議資料量少的情況下使用。引用型別 object型別 類 陣列 介面 值傳遞 1 直接傳遞值型別 結...