python基礎入門教程:傳參是傳值仍是傳引用

在此以前先來看看變量和對象的關係:Python 中一切皆爲對象,數字是對象,列表是對象,函數也是對象,任何東西都是對象。而變量是對象的一個引用(又稱爲名字或者標籤),對象的操做都是經過引用來完成的。例如,a = []是一個空列表對象,變量 a 是該對象的一個引用
例1python

def test(c):
 c.append("hello world")
 print(c,id(c))
 return
list = [1,2]
test(list)
print(list,id(list))

輸出app

[1, 2, 'hello world'] 2463790879240
[1, 2, 'hello world'] 2463790879240

在執行test函數前,列表list和參數c都指向同一個對象,執行test時並無從新賦值,也沒有新的指向過程,append方法只是對列表對象插入一個元素,對象仍是原來的對象,只是對象裏面的內容變了,由於參數c和列表list都是綁定同一個對象上,執行c.append和list.append方法本質都是對一個對象進行操做,所以list列表在調用函數後發生了變化,但id沒變,仍是原來那個對象。所以,若是函數收到的是一個可變對象(好比字典或者列表)的引用,就能修改對象的原始值--至關於經過「傳引用」來傳遞對象函數

例2學習

#Python學習交流羣:778463939

def test2(p):
p = "i in test2"
print(p,id(p))
str = "hello word"
test2(str)
print(str,id(str))

輸出:code

i in test2 2885210784112
hello word 2885210784048

id不同,因此說不是同一個對象,也就是說咱們傳的仍是引用。所以,若是函數收到的是一個不可變對象(好比數字、字符或者元組)的引用,就不能直接修改原始對象--至關於經過「傳值'來傳遞對象。對象

總結:class

Python參數傳遞採用的確定是「傳對象引用」的方式。這種方式至關於傳值和傳引用的一種綜合。若是函數收到的是一個可變對象(好比字典或者列表)的引用,就能修改對象的原始值--至關於經過「傳引用」來傳遞對象。若是函數收到的是一個不可變對象(好比數字、字符或者元組)的引用,就不能直接修改原始對象--至關於經過「傳值'來傳遞對象。test

相關文章
相關標籤/搜索