1.2.4.4 值传递
可以在一个函数内部改变变量的值吗?大多数语言(C、Java…)区分了“值传递“和”引用传递“。在Python中,没有严格的这种区分,并且视你的变量是否会修改而有一些不同。幸运的是,这些情况存在明确的规则。
函数的参数是对象的引用,传递的是值。当你像一个函数传递了一个变量,Python传递的是对象的引用,这个对象引用的变量(值)。而不是变量本身。
如果值传递给函数的值是不可变的,那么这个函数并不会改变调用者的变量。如果值是可变的,那么函数将可能在原地修改调用者的变量。
In [13]:
def try_to_modify(x, y, z):
x = 23
y.append(42)
z = [99] # 新引用
print(x)
print(y)
print(z)
a = 77 # 不可变变量
b = [99] # 可变变量
c = [28]
try_to_modify(a, b, c)
23
[99, 42]
[99]
In [14]:
print(a)
77
In [15]:
print(b)
[99, 42]
In [16]:
print(c)
[28]
函数有名为local namespace的本地变量表。
变量X只存在于函数try_to_modify内部。