Python函数参数传递机制详解
1. Python参数传递基础
1.1 参数传递模式
Python的参数传递方案与C++的引用参数选项并不完全相同,但在实践中,它与C语言的参数传递模型非常相似:
- 不可变参数按值传递 :像整数和字符串这样的对象是通过对象引用传递的,而不是通过复制。但由于无法对不可变对象进行原地修改,其效果类似于复制。
- 可变参数按指针传递 :列表和字典等对象同样通过对象引用传递,这类似于C语言将数组作为指针传递的方式。可变对象可以在函数中进行原地修改,就像C数组一样。
1.2 参数与共享引用示例
以下代码展示了参数传递的特性:
def changer(a, b):
a = 2
b[0] = 'spam'
X = 1
L = [1, 2]
changer(X, L)
print(X, L) # 输出: (1, ['spam', 2])
在这个代码中, changer
函数对参数 a
赋值,并修改了参数 b
所引用对象的一个元素。这两个赋值操作在语法上只有细微差别,但结果却截然不同:
- 由于 a
是函数作用域内的局部名称,第一个赋值操作对调用者没有影响,它只是改变了局部变量 a
,而没有改变调用者中名称 X
的绑