相信大家必定在個人公衆號已經看到了,這篇文章關於 引用傳遞變量 的簡單介紹,在這裏咱們將更加深刻的理解這篇文章的重點,能夠關注個人公衆號哦 《志學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
能夠返回新值。這不會改變事物傳遞的方式,可是可讓您得到想要的信息: