python函式的引數傳值使用的是引用傳值,也就是說傳的是引數的記憶體位址值,因此在函式中改變引數的值,函式外也會改變。
這裡需要注意的是如果傳的引數型別是不可改變的,如string型別、元組型別,函式內如需改變引數的值,則相當於重新新建了乙個物件。
# 新增了乙個string型別的元素新增到末尾def changelist(lis):
print lis
return
lis = [1, 2, 3]
changelist(lis)
print lis
得到的結果是:
[1,2,3, 'hello i am the addone']
[1,2, 3,'hello i am the addone']
def changestring(string):string = 'i changed as this'
print string
return
string = 'hello world'
changestring(string)
print string
string是不可改變的型別,得到的結果是:
i changed as this
hello world
傳值 傳值引用
首先對傳值和傳引用要有個基本的概念 傳值 傳遞的是值的副本。方法中對副本的修改,不會影響到呼叫方。傳引用 傳遞的是引用的副本,共用乙個記憶體,會影響到呼叫方。此時,形參和實參指向同乙個記憶體位址。對引用副本本身 物件位址 的修改,如設定為null,重新指向其他物件,不會影響到呼叫方。直接上 更好的理...
java傳值與傳引用問題總結
1.基本型別與引用型別區別 對於基本型別 int long short double char byte float boolean 變數直接儲存資料的值 對於引用型別,變數儲存的是物件的位址,由此位址指向實際物件。如圖 對於基本型別,直接傳值,方法裡進行重新賦值不會導致原值改變 public cl...
python中的傳值和傳引用
和其他語言不一樣,傳遞引數的時候,python不允許程式設計師選擇採用傳值還是傳引用。python引數傳遞採用的肯定是 傳物件引用 的方式。實際上,這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件 比如字典或者列表 的引用,就能修改物件的原始值 相當於通過 傳引用 來傳遞物件。如果...