第一道面試題 - 如何經過引用傳遞變量 - 2020/4/25

相信大家必定在個人公衆號已經看到了,這篇文章關於 引用傳遞變量 的簡單介紹,在這裏咱們將更加深刻的理解這篇文章的重點,能夠關注個人公衆號哦 《志學Python》python

這篇文章我已經放到個人github 上面了,能夠給我star,謝謝git

how-do-i-pass-a-variable-by-referencegithub

如何經過引用傳遞變量?spa

其實想問的是它這個類裏面,在 __init__ 方法初始化的時候,調用了 change() 方法,如何將改變 __init__裏面的 self.variable 這裏變量的值,可是顯然這種方式是行不通的,若是要經過引用,咱們可使用下面這種改造方式 3d

可是咱們須要更加深刻的瞭解究竟是怎麼回事code

參數經過賦值傳遞。其背後的理由是雙重的:對象

傳入的參數其實是對對象的引用(但引用是經過值傳遞的) 有些數據類型是可變的,但有些則不是 因此:blog

若是將可變對象傳遞給方法,則該方法將得到對該對象的引用,而且能夠對其進行突變,可是若是您將該引用從新綁定到該方法中,則外部做用域對此一無所知完成後,外部參考仍將指向原始對象。作用域

若是將不可變對象傳遞給方法,則仍然沒法從新綁定外部引用,甚至沒法使對象發生突變rem

列表-可變類型

咱們嘗試改變列表裏面數據

因爲傳入的參數是對的引用outer_list,而不是其副本,所以咱們可使用變異列表方法對其進行更改,並使更改反映在外部做用域中。

如今讓咱們看看當嘗試更改做爲參數傳入的引用時會發生什麼:

因爲the_list參數是經過值傳遞的,所以爲其分配新列表不會影響方法外部的代碼。該the_list是副本outer_list的參考,咱們不得不the_list指向一個新的列表,但沒有辦法改變outer_list的值

字符串-不可變的類型

它是不可變的,所以咱們無能爲力,沒法更改字符串的內容 如今,讓咱們嘗試更改參考

一樣,因爲the_string參數是經過值傳遞的,所以爲其分配新的字符串不會影響方法外部的代碼。該the_string是副本outer_string的參考,咱們不得不the_string指向一個新的字符串,但沒有辦法改變,outer_string

咱們如何解決這個問題?

能夠返回新值。這不會改變事物傳遞的方式,可是可讓您得到想要的信息:

相關文章
相關標籤/搜索