Python 函数调用的时候参数的传递方式是值传递还是引用传递?

Python 函数调用的时候参数的传递方式是值传递还是引用传递?

在 Python 中,函数调用时参数的传递方式是引用传递。这意味着函数在调用时不会复制参数的值,而是传递参数的引用(即指针)。因此,在函数内部对参数进行的任何更改都会影响到原始参数的值。

举个例子,假设有一个函数,它将列表作为参数并将其第一个元素的值加倍:

def double_first(lst):
    lst[0] *= 2

现在,如果我们调用这个函数并传递一个列表,我们会发现列表的第一个元素已经被加倍了:

my_list = [1, 2, 3]
double_first(my_list)
print(my_list)
# 输出 [2, 2, 3]

注意事项:

  1. 尽管 Python 的参数传递方式是引用传递,但是对于不可变对象(如数字、字符串、元组等),函数无法更改它们的值。例如,如果我们在函数内尝试更改字符串的一个字符,它将引发错误。
  2. 如果函数修改了参数的值,但是我们不想更改原始参数的值,我们可以在调用函数时传递参数的副本。这可以通过使用切片或复制列表来实现。例如,我们可以使用以下代码来调用上面的函数,而不会更改原始列表的值:
double_first(my_list[:])

总之,Python 函数调用的参数传递方式是引用传递。这意味着函数在调用时不会复制参数的值,而是传递参数的引用。这使得函数能够修改原始参数的值,但也需要注意一些副作用。