【发布时间】:2021-05-18 07:09:36
【问题描述】:
考虑以下代码:
def test(Tlist):
Tlist.sort(reverse=True)
Tlist=[0.02,0.1,4,35]
print(Tlist)# [0.02, 0.1, 4, 35]
test(Tlist)
print(Tlist)# [35, 4, 0.1, 0.02]
def test2(a):
a+=1
a=0
print(a)# 0
test2(a)
print(a)# 0
让我困惑的是,在第一个函数测试中,列表 Tlist 正在被修改。但是在函数test2中,变量a不是。
但从概念上讲,两者都作为参数发送给我的函数。我不明白为什么要修改列表?我认为将变量发送到函数的参数会导致该变量不会在函数内全局更改。
【问题讨论】:
-
Tlist.sortmutatesTlist对象,其中只有一个,因此任何持有该对象引用的人都可以看到更改。a+=为局部变量a分配了一个新值,该值仅在函数内部可见。 -
@Anonymous “按值传递”或“按引用传递”不适用于此处。使用
a += 1,您可以将名称a重新绑定到一个新值。原值a被绑定到不会改变。
标签: python scope global-variables