在此之前先來看看變數和物件的關系:Python 中一切皆為物件,數字是物件,串列是物件,函式也是物件,任何東西都是物件,而變數是物件的一個參考(又稱為名字或者標簽),物件的操作都是通過參考來完成的,例如,a = []是一個空串列物件,變數 a 是該物件的一個參考
例1
def test(c):
c.append("hello world")
print(c,id(c))
return
list = [1,2]
test(list)
print(list,id(list))
輸出
[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))
輸出:
i in test2 2885210784112
hello word 2885210784048
id不一樣,所以說不是同一個物件,也就是說我們傳的還是參考,因此,如果函式收到的是一個不可變物件(比如數字、字符或者元組)的參考,就不能直接修改原始物件--相當于通過“傳值'來傳遞物件,
總結:
Python引數傳遞采用的肯定是“傳物件參考”的方式,這種方式相當于傳值和傳參考的一種綜合,如果函式收到的是一個可變物件(比如字典或者串列)的參考,就能修改物件的原始值--相當于通過“傳參考”來傳遞物件,如果函式收到的是一個不可變物件(比如數字、字符或者元組)的參考,就不能直接修改原始物件--相當于通過“傳值'來傳遞物件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246436.html
標籤:其他
