失业程序员复习python笔记——函数参数传递
Python的函数参数传递是赋值传递,或者叫对象的引用传递。Python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已。
先看下面一个例子:
def func(x):
x = 100
a = 1
func(a)
print(a)
D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
1
Process finished with exit code 0
这里的参数传递,使变量 a 和 x 同时指向了 1 这个对象。但当我们执行到 x = 100 时,系统会重新创建一个值为 100 的新对象,并让 x 指向它;而 a 仍然指向 1 这个对象。所以,a 的值不变,仍然为 1。
当可变对象当作参数传入函数里的时候,改变可变对象的值,就会影响所有指向它的变量。
def func(l2):
l2.append(100)
l1 = [1, 2, 3]
func(l1)
print(l1)
D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
[1, 2, 3, 100]
Process finished with exit code 0
l1 和 l2 先是同时指向值为[1, 2, 3]的列表。不过,由于列表可变,执行 append() 函数,对其末尾加入新元素 4 时,变量 l1 和 l2 的值也都随之改变了。
再看一个传入元组的例子
def func(tup):
tup+(100,)
tup = (1, 2, 3)
func(tup)
print(tup)
D:\pyproject\venv\Scripts\python.exe D:/pyproject/py16.py
(1, 2, 3)
Process finished with exit code 0
这里传入的是元组,元组是不可变的,执行tup+(100,)语句后,其实新开辟了一块内存并填入原来元组的值,所以tup的值没有改变