作者JaegwonKim (金在权)
看板Python
标题新手请教关於swap两个值
时间Wed Dec 19 07:37:18 2018
各位好,我写了三个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://webptt.com/cn.aspx?n=bbs/Python/M.1545176246.A.BDC.html
1F:推 anotherday: Case2, local & global variable 12/19 07:49
2F:→ TakiDog: 同楼上 有python不都这样吗 12/19 10:32
3F:→ TakiDog: a,b = b,a 12/19 10:32
4F:→ weii0000: 2要return? 12/19 12:55
5F:→ yoyololicon: case2的tem, a, b都是local variable 影响不到外面 12/19 14:27
6F:推 gundan: 你要搞懂变数生命周期的问题 12/19 15:58
7F:推 keepxha: Case2 存到同一个记忆体了? 12/19 16:55
8F:推 keepxha: 用a is b ; x is y 验证看看? 12/19 17:01
9F:推 lemon651: 不用验证阿,你list指定index附值当然可以swap,functio 12/20 02:47
10F:→ lemon651: n里重新assign reference外面当然不会被影响 12/20 02:47
11F:推 lemon651: python swap用单行就可以了 a, b = b, a 12/20 02:50