Python基础之值传递和引用传递详解
一、概述
在Python中,函数传参的方式有两种:值传递和引用传递。对于初学者而言,这一概念非常重要。
二、值传递(传递不可变类型)
值传递是指在函数调用时,将实际参数的值复制一份放到函数栈内存中,以供函数使用。因此在函数内部对这个参数进行修改,不会对原来的变量造成影响。
例如:
def change(a):
a = 10
b = 5
change(b)
print(b) # 输出结果为 5
在这个例子中,变量 b
的值为 5
。然后我们将变量 b
作为参数调用了 change()
函数,函数内部对参数 a
进行修改,将其值改为 10
。但是输出结果依然为 5
,这表明传递的是变量值(也称为传递不可变类型)。
三、引用传递(传递可变类型)
引用传递是指在函数调用时,将实际参数的地址传递到函数中,那么在函数内部对这个地址所指的内容进行修改,也就是直接修改的是实际参数本身的值。
例如:
def change(a):
a.append(10)
b = [1, 2, 3]
change(b)
print(b) # 输出结果为 [1, 2, 3, 10]
在这个例子中,变量 b
的值为 [1, 2, 3]
。然后我们将变量 b
作为参数调用了 change()
函数,函数内部对参数 a
所代表的列表进行修改,向其中添加了值为 10
的元素。因此输出结果为 [1, 2, 3, 10]
。
在Python中,可变类型和不可变类型有哪些呢?哪些属于可变,哪些属于不可变呢?
可变类型:
- 列表(list)
- 字典(dict)
- 集合(set)
不可变类型:
- 数字(int、float、bool、complex)
- 字符串(str)
- 元组(tuple)
四、示例说明
下面我们再来结合一个例子,更好地理解值传递和引用传递之间的差别。
def change(a):
a = a + 1
b = 5
change(b)
print(b) # 输出结果为 5
在这个例子中,和之前的例子一样,我们定义了一个 change()
函数,并且将变量 b
作为函数的参数传入。然而,这次我们传递的是一个整型变量,而不是一个列表变量。
我们期望的结果是将变量 b
的值加 1,并将结果输出。但是,实际输出结果依然为 5
。这是为什么?
对于这个问题,可以这么解释:在函数调用时,变量 b
的值会被复制一份到函数定义的参数 a
中。此时,a
和 b
指向的是同一个位置。然后在函数中对 a
进行加法操作,得到了 6
这个新的值。但是由于这个操作并没有修改原来的变量 b
,所以输出结果依然是 5
。
五、总结
在Python中,函数传参的方式有两种:值传递和引用传递。值传递是传递不可变类型的变量,引用传递是传递可变类型的变量。使用不同的参数传递方式,我们在函数内部对参数进行修改时会得到不同的结果。因此,在实际编程中,我们需要根据参数类型以及需求来选择不同的参数传递方式。
以上就是 Python 基础之值传递和引用传递详解的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基础之值传递和引用传递详解 - Python技术站