欢迎访问宙启技术站
智能推送

Python函数的参数传递方式:传值与传引用

发布时间:2023-06-15 18:52:36

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中,参数传递方式可以分为传值和传引用两种方式。基本类型使用传值方式进行参数传递,而一些数据类型(如列表、字典等)使用传引用方式进行参数传递。在我们编写函数时,需要根据不同的情况选择合适的参数传递方式,并注意函数执行结束后原始对象的值是否发生了变化。