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
的值。