跳到主要内容

Python是按引用调用还是按值调用?

参考答案:

在 Python 中,对象的传递是按照引用来进行的,而不是按照值。这意味着,当你传递一个对象(如列表、字典或自定义类的实例)给函数时,你实际上传递的是对该对象的引用的副本,而不是对象的完整副本。

下面是一个简单的例子来说明这个概念:

def modify_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # 输出:[1, 2, 3, 4]

在这个例子中,modify_list 函数接收一个列表作为参数,并在该列表的末尾添加了一个元素。由于 Python 是按照引用来传递对象,所以 modify_list 函数实际上修改的是原始列表(my_list),而不是它的一个副本。因此,当我们在 modify_list 函数之后打印 my_list 时,可以看到列表已经被修改了。

需要注意的是,虽然 Python 是按照引用来传递对象,但是如果你传递的是不可变类型(如整数、浮点数、字符串或元组),那么实际上传递的是这些值的副本,因为这些类型是不可变的,所以无法修改原始值。

例如:

def modify_value(x):
    x = 4

num = 3
modify_value(num)
print(num)  # 输出:3

在这个例子中,modify_value 函数试图修改其参数 x 的值,但由于 x 是一个整数(不可变类型),所以实际上传递的是 num 的一个副本。因此,modify_value 函数对 x 的修改不会影响 num 的值。