Reference
參照
何謂參照(reference)?reference在程式語言中非常重要,不同的程式語言,其參照的設計可能不同, 我們先看看python的參照是如何。
這邊說明一下,學軟體的有個問題,常常不知道該表達中文還是英文,其實表達英文最能直接貼近原本的意義, 因為這些名詞的發明,本來就是由發明者以當初的語言決定的。
所以我這邊都會盡量列出中文,但未來仍以英文為主要描述語言。
我們來看看以下的範例:
從這個程式我們發現什麼,我們以為appleList[0] = 100
不會影響bananaList的結果,但事實上則不然, print(bananaList)
會印出跟appleList
一樣的東西, 所以不論我們對appleList怎麼修改,bananaList都會跟著變,也就是appleList 其實就是 bananaList。
但是為什麼apple跟banana卻沒有這樣的關係呢?
原因是因為list在程式語言中是以參照的方式指派給變數, 我們假設appleList在電腦中是以一串數字表示,比方說135579,(就像是學號一樣,學號代表著一個學生) 那麼bananaList = appleList
實際上是將135579指派給bananaList, 而135579則實際上指著實際的值,也就是[1, 2, 3]
,所以我們對bananaList與appleList所做的修改, 其實都是對著135579所指的東西修改,所以修改appleList就會修改到bananaList了。
這樣的觀念跟物件導向其實很有關係,待我們講到物件導向的時候,再回來複習一遍。
傳reference給函式
我們再看一下這個範例:
我們發現當我們將fruits傳進去一個函式時,我們在函式中修改了其中一個值,在外層中的fruits的值也變了,這也是因為我們將fruits的參照傳給了函式, 所以在函式中對同一個參照的修改,當然會影響到外層同一個參照的變數。
所以當指派發生時,我們要注意str, int, float, complex型別是值的指派,而比較複雜的資料則是reference的指派。
Last updated
Was this helpful?