看板 Python 關於我們 聯絡資訊
各位好,我寫了三個swap值的程式碼。 發現第一個跟第三個成功,第二個的失敗。 第二個與第三個差別是一個在function裡執行,一個沒有。 但第一個也是在function裡執行,卻成功了@_@ 我的想法是這或許跟python的pass by reference的特性有關? 求高手解釋,謝謝! #swap experiment1, swap via function through list index, success def swap(items, i, j): tmp = items[i] items[i] = items[j] items[j] = tmp s = [0, 1] print(s) #before swap -> [0,1] swap(s, 0, 1) print(s) #after swap ->[1,0] #swap experiment2, swap via function, fail def swap1(a, b): tem = a a = b b = tem a = 0 b = 1 print(a) #before swap -> 0 swap1(a,b) print(a) #after swap -> 0 why? #swap experiment3, swap without function, success x = 0 y = 1 print(x) #before swap -> 0 tem = x x = y y = tem print(x) #after swap -> 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.196.251 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1545176246.A.BDC.html
anotherday: Case2, local & global variable 12/19 07:49
TakiDog: 同樓上 有python不都這樣嗎 12/19 10:32
TakiDog: a,b = b,a 12/19 10:32
weii0000: 2要return? 12/19 12:55
yoyololicon: case2的tem, a, b都是local variable 影響不到外面 12/19 14:27
gundan: 你要搞懂變數生命週期的問題 12/19 15:58
keepxha: Case2 存到同一個記憶體了? 12/19 16:55
keepxha: 用a is b ; x is y 驗證看看? 12/19 17:01
lemon651: 不用驗證阿,你list指定index附值當然可以swap,functio 12/20 02:47
lemon651: n裡重新assign reference外面當然不會被影響 12/20 02:47
lemon651: python swap用單行就可以了 a, b = b, a 12/20 02:50