2.2.1 函数传参

对于熟悉 C 系列语言的人来说,函数传参的方式一目了然。默认是拷贝传值,如果传指针是引用传值。我们先来看一段简单的 Python 代码:

def foo(arg):
    arg = 5
    print(arg)

a = 1
foo(a)
print(a)
# 输出 5 和 1

这段代码的结果符合我们的预期,从这段代码来看,Python 也属于拷贝传值。但如果再看这段代码:

def foo(arg):
    arg.append(1)
    print(arg)

a = [1]
foo(a)
print(a) # 输出两个 [1, 1]

你会发现参数数组在函数内部被改变了。就像是 C 语言中传递了变量的指针一样。所以 Python 到底是拷贝传值还是引用传值呢?答案都是否定的

Python 的传值方式可以被理解为混合传值。对于那些不可变的对象(比如 1.1.2 节中介绍过的元组,还有数字、字符串类型),传值方式是拷贝传值;对于那些可变对象(比如数组和字典)则是引用传值。

Last updated