Python函数的参数传递方式:传值与传引用
Python函数的参数传递方式可以分为传值和传引用两种方式。
一、传值
在Python中,基本类型(如int、float、string等)是使用传值方式进行参数传递的。这意味着,当我们将一个基本类型作为函数的参数传递时,实际上是将该对象的值复制到一个新的内存地址中,然后传递该地址给函数。
例如:
def add(x):
x += 10
return x
num = 5
print(add(num)) # 输出:15
print(num) # 输出:5
在这个例子中,add()函数接收一个整数参数x,并将其值加上10,然后返回该值。我们发现,在函数调用结束后,原始变量num的值并没有改变。这个原因是因为当我们将num作为参数传递给函数时,实际上是复制了一个num的值,然后将该值传递给add()函数。在函数内部,修改的是一个新的内存地址中的值,而不是原始变量num本身的值。因此,函数调用结束后,原始变量的值并没有发生变化。
二、传引用
在Python中,一些数据类型(如列表、字典等)是使用传引用方式进行参数传递的。这意味着,当我们将这些数据类型作为函数的参数传递时,实际上是将该对象的引用(或者说内存地址)复制到一个新的内存地址中,然后将该地址传递给函数。
例如:
def my_func(list1):
list1[0] = 10
return
my_list = [1, 2, 3]
my_func(my_list)
print(my_list) # 输出:[10, 2, 3]
在这个例子中,my_func()函数接收一个列表参数list1,并将该列表的 个元素赋值为10。然而,我们发现在函数调用结束后,原始列表my_list的值也发生了变化。
这个原因是因为在Python中,列表是使用传引用方式进行参数传递的。当我们将my_list作为参数传递给my_func()函数时,实际上是复制了my_list的地址,然后将该地址传递给函数。在函数内部,修改的是和原始列表my_list地址相同的内存地址上的值。因此,函数调用结束后,原始列表my_list的值也发生了变化。
总结
在Python中,参数传递方式可以分为传值和传引用两种方式。基本类型使用传值方式进行参数传递,而一些数据类型(如列表、字典等)使用传引用方式进行参数传递。在我们编写函数时,需要根据不同的情况选择合适的参数传递方式,并注意函数执行结束后原始对象的值是否发生了变化。
