如何用1年獲得別人3年的積累?

管理晨讀2018-01-15 10:53:51

今天給一個朋友講 Python,他提問在Python 中函數是傳值還是傳引用

值變量

這個問題其實是一個偽問題,在 Python、Java、C#中根本不存在傳值還是傳引用的說法。理解這個問題先要從變量說起(以 Python 為例)

a = 10
b = 20

此時變量 a 就表示數字 10,b 表示數字 20,內存佈局如下:

如果做賦值

c = a

此時 a、c 是兩塊不同的內存空間,因為a 表示的是數字 10,當為 c 賦值的時候就把數字 10 賦值給了 c。此時 a、c 都表示數字 10

地址變量

繼續看例子

l = [1, "abc", 10]

變量 l 裡面有多個元素,所以 l 不再是具體的某一個值。它表示一個地址。

再次強調:變量 l 表示一個地址變量 l 表示一個地址變量 l 表示一個地址所以當賦值的時候,我們是把地址賦給一個新的變量

t = l

總結

變量有兩種含義,一個表示值(變量本身的值)一個表示地址(複合數據的開始地址),所以當我們賦值的時候是把值賦給新的變量或者把地址賦給新的變量。這個語義始終都是一致的,包括在函數傳遞的時候。所以其實並不存在傳值或者傳引用的概念,是變量的語義本身是值還是地址

判斷一個變量是值還是引用的方法很簡單,就看這個數據是簡單類型還是複合類型(從數據結構的角度來說)。


歡迎加入我的知識星球(免費)



歡迎關注公眾賬號瞭解更多信息“寫程序的康德——思考、批判、理性”




https://weiwenku.net/d/108557319