python传参是传值还是传引用
在此之前先來看看變量和對(duì)象的關(guān)系:Python 中一切皆為對(duì)象,數(shù)字是對(duì)象,列表是對(duì)象,函數(shù)也是對(duì)象,任何東西都是對(duì)象。而變量是對(duì)象的一個(gè)引用(又稱為名字或者標(biāo)簽),對(duì)象的操作都是通過引用來完成的。例如,a = []是一個(gè)空列表對(duì)象,變量 a 是該對(duì)象的一個(gè)引用
例1
輸出
[1, 2, 'hello world'] 2463790879240 [1, 2, 'hello world'] 2463790879240在執(zhí)行test函數(shù)前,列表list和參數(shù)c都指向同一個(gè)對(duì)象,執(zhí)行test時(shí)并沒有重新賦值,也沒有新的指向過程,append方法只是對(duì)列表對(duì)象插入一個(gè)元素,對(duì)象還是原來的對(duì)象,只是對(duì)象里面的內(nèi)容變了,因?yàn)閰?shù)c和列表list都是綁定同一個(gè)對(duì)象上,執(zhí)行c.append和list.append方法本質(zhì)都是對(duì)一個(gè)對(duì)象進(jìn)行操作,因此list列表在調(diào)用函數(shù)后發(fā)生了變化,但id沒變,還是原來那個(gè)對(duì)象。因此,如果函數(shù)收到的是一個(gè)可變對(duì)象(比如字典或者列表)的引用,就能修改對(duì)象的原始值--相當(dāng)于通過“傳引用”來傳遞對(duì)象
例2
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和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不一樣,所以說不是同一個(gè)對(duì)象,也就是說我們傳的還是引用。因此,如果函數(shù)收到的是一個(gè)不可變對(duì)象(比如數(shù)字、字符或者元組)的引用,就不能直接修改原始對(duì)象--相當(dāng)于通過“傳值’來傳遞對(duì)象。
總結(jié):
Python參數(shù)傳遞采用的肯定是“傳對(duì)象引用”的方式。這種方式相當(dāng)于傳值和傳引用的一種綜合。如果函數(shù)收到的是一個(gè)可變對(duì)象(比如字典或者列表)的引用,就能修改對(duì)象的原始值--相當(dāng)于通過“傳引用”來傳遞對(duì)象。如果函數(shù)收到的是一個(gè)不可變對(duì)象(比如數(shù)字、字符或者元組)的引用,就不能直接修改原始對(duì)象--相當(dāng)于通過“傳值’來傳遞對(duì)象。
總結(jié)
以上是生活随笔為你收集整理的python传参是传值还是传引用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python教程:内置函数filter(
- 下一篇: python计算文件md5值