python传参是传值还是传引用
在此之前先來看看變量和對象的關系:Python 中一切皆為對象,數字是對象,列表是對象,函數也是對象,任何東西都是對象。而變量是對象的一個引用(又稱為名字或者標簽),對象的操作都是通過引用來完成的。例如,a = []是一個空列表對象,變量 a 是該對象的一個引用
例1
輸出
[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學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' 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 2885210784048id不一樣,所以說不是同一個對象,也就是說我們傳的還是引用。因此,如果函數收到的是一個不可變對象(比如數字、字符或者元組)的引用,就不能直接修改原始對象--相當于通過“傳值’來傳遞對象。
總結:
Python參數傳遞采用的肯定是“傳對象引用”的方式。這種方式相當于傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當于通過“傳引用”來傳遞對象。如果函數收到的是一個不可變對象(比如數字、字符或者元組)的引用,就不能直接修改原始對象--相當于通過“傳值’來傳遞對象。
總結
以上是生活随笔為你收集整理的python传参是传值还是传引用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python教程:内置函数filter(
- 下一篇: websocket python爬虫_p