作者nomoyang (25..)
看板Python
標題[問題] 函式中傳引數的問題
時間Sat Feb 23 11:14:10 2008
以下有兩個例子,第一個我覺的沒有問題,不過第二個我就不懂了,有問
題的地方在於我覺的主程式中大寫的X 與函式中小寫的x應該都是指向同一個
記憶體位址,而且加上它本身物件型態為「數值」(屬於不可變更的物件),
所以輸出的結果,第一個程式看來合理,不過為何第二個程式輸出的結果,
不是 1 [3, 4],反而是 2 [3, 4],請大家指教,謝謝 ^^
第一個:
def changer(x, y):
x = 2
y[0] = 'spam'
X = 1
L = [1, 2]
changer(X, L)
print X, L
輸出結果: 1 ['spam', 2]
第二個:
def multiple (x, y):
x = 2
y = [3, 4]
return (x, y)
X = 1
L = [1, 2]
(X, L) = multiple (X, L)
print X, L
輸出結果:2 [3, 4]
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.108.206
推 cccx:在做x=2時 x會得到新的位址來存2 並在回傳時改掉X的位址 02/23 12:47
→ nomoyang:我大概懂了,關鍵在第二支程式有return, 所以把原來的X 02/24 11:04
→ nomoyang:儲存的地址取代帶了,是這樣吧 02/24 11:05
→ nomoyang:謝謝拉 02/24 11:13