作為一種編程語(yǔ)言,Python也有很多變量和類型,正是因?yàn)檫@些特點(diǎn),它才比較靈活。后面我們?cè)趯懘a的時(shí)候,會(huì)遇到各種傳參的情況,其中就涉及到值的傳遞和引用傳遞,兩者雖然差不多,但本質(zhì)還是有很大區(qū)別的。本文介紹了值傳遞和引用傳遞的區(qū)別,請(qǐng)參閱以下內(nèi)容:
引用是什么?
例如,我們?cè)谧兞縞ount中存儲(chǔ)一個(gè)值。對(duì)于引用類型,變量存儲(chǔ)實(shí)例對(duì)象的地址,即指向?qū)嵗龑?duì)象,這種類型的變量通常稱為引用。
值傳遞:形參是實(shí)參的拷貝,改變形參的值不影響外部實(shí)參的值。從被調(diào)用函數(shù)的角度來(lái)看,價(jià)值傳遞是單向的。參數(shù)的值只能傳入不能傳出。當(dāng)需要在函數(shù)內(nèi)部修改參數(shù)并且預(yù)計(jì)更改不會(huì)影響調(diào)用者時(shí),使用值傳遞。
指針傳遞:形參是指向?qū)崊⒌刂返闹羔槨V羔槍?duì)形參進(jìn)行操作時(shí),相當(dāng)于對(duì)實(shí)參本身進(jìn)行操作。
引用傳遞:形參相當(dāng)于實(shí)參的“別名”。對(duì)形參的運(yùn)算實(shí)際上就是對(duì)實(shí)參的運(yùn)算。在按引用傳遞的過(guò)程中,被調(diào)用函數(shù)的形參也作為局部變量在棧中開辟內(nèi)存。空間,但是此時(shí)存儲(chǔ)的是調(diào)用函數(shù)放入的實(shí)參變量的地址。
任何對(duì)被調(diào)用函數(shù)的形參的操作都作為間接尋址處理,即通過(guò)棧中存儲(chǔ)的地址訪問(wèn)調(diào)用函數(shù)中的實(shí)參變量。因此,被調(diào)用函數(shù)對(duì)形式參數(shù)執(zhí)行的任何操作都會(huì)影響調(diào)用函數(shù)中的實(shí)際參數(shù)變量。
指針傳遞和引用傳遞的應(yīng)用場(chǎng)景:
修改函數(shù)內(nèi)部的參數(shù),希望修改對(duì)調(diào)用者有影響。對(duì)比指針/引用傳遞可以將形參的變化“傳遞”到實(shí)參(其實(shí)是直接在實(shí)參的內(nèi)存中修改,不像值傳遞,是將實(shí)參的值復(fù)制到另一個(gè)內(nèi)存地址來(lái)修改)
另一種用法是:當(dāng)一個(gè)函數(shù)實(shí)際需要返回多個(gè)值,但只能顯式返回一個(gè)值時(shí),可以將需要返回的變量作為指針/引用傳遞給函數(shù),以便函數(shù)修改后返回,調(diào)用者可以獲得修改后的變量,相當(dāng)于隱式返回值傳遞。