新手請教關於swap兩個值

作者: JaegwonKim (金在權)   2018-12-19 07:37:18
各位好,我寫了三個swap值的程式碼。
發現第一個跟第三個成功,第二個的失敗。
第二個與第三個差別是一個在function裡執行,一個沒有。
但第一個也是在function裡執行,卻成功了@[email protected]
我的想法是這或許跟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
作者: anotherday   2018-12-19 07:49:00
Case2, local & global variable
作者: TakiDog (多奇狗)   2018-12-19 10:32:00
同樓上 有python不都這樣嗎a,b = b,a
作者: weii0000 (海邊ㄉ一朵花)   2018-12-19 12:55:00
2要return?
作者: yoyololicon (蘿莉大好)   2018-12-19 14:27:00
case2的tem, a, b都是local variable 影響不到外面
作者: gundan (彈彈的哀傷)   2018-12-19 15:58:00
你要搞懂變數生命週期的問題
作者: keepxha (hahahaha)   2018-12-19 16:55:00
Case2 存到同一個記憶體了?用a is b ; x is y 驗證看看?
作者: lemon651 (小明)   2018-12-20 02:47:00
不用驗證阿,你list指定index附值當然可以swap,function裡重新assign reference外面當然不會被影響python swap用單行就可以了 a, b = b, a

Links booklink

Contact Us: admin [ a t ] ucptt.com