Python函数:如何对不可变对象和可变对象进行参数传递
发布时间:2023-06-20 17:10:21
在Python中,函数的参数传递方式有两种:传递不可变对象和传递可变对象。不可变对象指的是一旦创建就不能被修改的对象,如数字、字符串、元组等;可变对象指的是可以被修改的对象,如列表、字典、集合等。
传递不可变对象:
当将不可变对象作为函数的参数时,函数实际上是创建了一个新的局部变量,这个局部变量和原变量指向的是同一个对象。但当在函数中对这个局部变量进行修改时,实际上是创建了一个新的对象,而不是修改原来的对象。因此,原变量并不会被修改。
例如:
def increment(x):
x += 1
print("x inside function: ", x)
a = 10
increment(a)
print("a outside function: ", a)
输出结果为:
x inside function: 11 a outside function: 10
在函数中对变量x进行了修改,但原变量a并未被修改。
传递可变对象:
当将可变对象作为函数的参数时,函数实际上是创建了一个新的局部变量,这个局部变量和原变量指向同一个对象。当在函数中修改这个局部变量时,原变量也会受到影响。
例如:
def add_num(nums):
nums.append(4)
nums.append(5)
print("nums inside function: ", nums)
lst = [1, 2, 3]
add_num(lst)
print("lst outside function: ", lst)
输出结果为:
nums inside function: [1, 2, 3, 4, 5] lst outside function: [1, 2, 3, 4, 5]
在函数中对可变对象nums进行了修改,原变量lst也受到了修改。
需要注意的是,在函数内部将可变对象赋值为不可变对象后,原变量不会受到影响。例如:
def modify_dict(d):
d = {}
print("d inside function: ", d)
my_dict = {'a': 1, 'b': 2}
modify_dict(my_dict)
print("my_dict outside function: ", my_dict)
输出结果为:
d inside function: {}
my_dict outside function: {'a': 1, 'b': 2}
在函数中将可变对象d赋值为一个空的字典,但原变量my_dict并未受到影响。
综上,传递不可变对象时,函数修改的是函数内部的局部变量,原变量不受影响;传递可变对象时,函数中对变量的修改会影响原对象。
