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