Python基础之值传递和引用传递详解

  • Post category:Python

Python基础之值传递和引用传递详解

在 Python 的编程中,参数的传递方式一般有两种,即值传递和引用传递。不同的传递方式会对参数的处理方式带来不同的影响。本攻略将详细讲解这两种传递方式的概念和影响。

值传递

值传递是指在函数调用时,实参将自己的值传递给函数中的形参,形参接收到实参的值之后,会在函数内部重新开辟一块内存存储这个值。对形参所做的任何修改都不会影响到实参的值。

下面是一个值传递的例子:

def change(a):
    a = a + 1

num = 10
change(num)
print(num)  # 输出结果为:10

在这个例子中,num 是外部传递给函数的实参,而 a 是函数内部的形参。在函数调用时,num 的值被传递给了 a,在函数内部对 a 进行修改后并不会影响到 num 的值,因此在打印 num 变量的时候,输出结果仍然是 10。

引用传递

引用传递是指在函数调用时,实参会将自己在内存中的地址传递给函数中的形参,形参接收到实参地址之后,会直接在函数内部修改这个地址所对应的内存中的值。在函数内部对形参所作的修改都会影响到实参的值。

下面是一个引用传递的例子:

def change(a):
    a.append(4)

list1 = [1, 2, 3]
change(list1)
print(list1)  # 输出结果为:[1, 2, 3, 4]

在这个例子中,list1 是一个列表,作为实参被传递给了 change 函数。函数中的形参 a 接收到了 list1 的地址,因此在函数内部对 a 所做的修改会影响到 list1 的值。在这个例子中,我们在函数中使用了 append() 方法向 a(即 list1)所对应的列表中添加了一个元素 4。打印 list1 变量时,我们看到其输出结果为 [1, 2, 3, 4],说明在函数内部的修改已经影响到了实参 list1 的值。

需要注意的是,在 Python 的编程中,有些数据类型(如数字、字符串、元组等)是不可变的,它们在传递时是采用值传递的方式,在函数内部对形参所作的任何修改都不会影响到实参的值。

例如,对于数字类型的变量,即便在函数中对其进行了修改,它也不会影响到函数外部的变量:

def change(a):
    a = a + 1

num = 10
change(num)
print(num)  # 输出结果为:10

总之,在 Python 的编程中,我们需要根据不同的情况选择适当的参数传递方式以确保程序的正确性。