Python函数传参是传值还是传指针

在Python中,函数传参的机制是通过传对象引用来实现的。这意味着在函数调用时,实参(也就是传入函数的参数)将引用与之关联的对象。不同的是,Python中的对象可以是可变对象(如列表、字典等)或不可变对象(如数字、字符串等)。

传值还是传指针?

在理解Python函数传参机制之前,我们先来搞清楚传值和传指针的概念。传值是指将实参的值复制一份给形参,函数内部对形参的修改不会影响到实参。传指针是指传递实参的内存地址给形参,函数内部对形参的修改会影响到实参。

在很多编程语言中,函数传参通常是传值的机制。这意味着函数内部对形参的修改不会影响到实参。然而,在Python中,函数传参机制是通过传对象引用来实现的,因此在函数内部对形参的修改可能会影响到实参。

传递可变对象的示例

我们首先来看一个传递可变对象的示例,如列表。

def modify_list(lst):
    lst.append(4)
    print("函数内部修改后的列表:", lst)

my_list = [1, 2, 3]
modify_list(my_list)
print("函数外部的列表:", my_list)

运行上述代码,输出结果为:

函数内部修改后的列表: [1, 2, 3, 4]
函数外部的列表: [1, 2, 3, 4]

可以看到,函数内部对列表进行修改后,函数外部的列表也发生了变化。这是因为函数传参时,传递的是可变对象的引用,所以函数内部对形参的修改会影响到实参。

传递不可变对象的示例

接下来,我们来看一个传递不可变对象的示例,如数字。

def modify_number(num):
    num += 1
    print("函数内部修改后的数字:", num)

my_num = 10
modify_number(my_num)
print("函数外部的数字:", my_num)

运行上述代码,输出结果为:

函数内部修改后的数字: 11
函数外部的数字: 10

可以看到,函数内部对数字进行修改后,函数外部的数字并没有发生变化。这是因为数字是不可变对象,函数传参时,实际上是将实参的值复制了一份给形参,所以函数内部对形参的修改不会影响到实参。

总结

在Python中,函数传参是通过传对象引用来实现的。对于可变对象,函数内部对形参的修改会影响到实参;对于不可变对象,函数内部对形参的修改不会影响到实参。

虽然函数传参机制是通过传对象引用来实现的,但是在实际应用中,我们通常不需要关心这个机制的细节。只要理解了传值和传指针的概念,并且了解到Python中的对象可以是可变对象或不可变对象,就能够正确地处理函数传参的问题。

希望通过本文的介绍,读者对Python函数传参的机制有所了解,并且能够正确地理解和使用函数传参。如果对于函数传参还有其他疑问,欢迎留言讨论。

参考文献:

  • Python官方文档: [