1.2.4.4 值传递

可以在一个函数内部改变变量的值吗?大多数语言(C、Java…)区分了“值传递“和”引用传递“。在Python中,没有严格的这种区分,并且视你的变量是否会修改而有一些不同。幸运的是,这些情况存在明确的规则。

函数的参数是对象的引用,传递的是值。当你像一个函数传递了一个变量,Python传递的是对象的引用,这个对象引用的变量(值)。而不是变量本身。

如果传递给函数的值是不可变的,那么这个函数并不会改变调用者的变量。如果是可变的,那么函数将可能在原地修改调用者的变量。

In [13]:

  1. def try_to_modify(x, y, z):
  2. x = 23
  3. y.append(42)
  4. z = [99] # 新引用
  5. print(x)
  6. print(y)
  7. print(z)
  8. a = 77 # 不可变变量
  9. b = [99] # 可变变量
  10. c = [28]
  11. try_to_modify(a, b, c)
  1. 23
  2. [99, 42]
  3. [99]

In [14]:

  1. print(a)
  1. 77

In [15]:

  1. print(b)
  1. [99, 42]

In [16]:

  1. print(c)
  1. [28]

函数有名为local namespace的本地变量表。

变量X只存在于函数try_to_modify内部。