欢迎访问宙启技术站
智能推送

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并未受到影响。

综上,传递不可变对象时,函数修改的是函数内部的局部变量,原变量不受影响;传递可变对象时,函数中对变量的修改会影响原对象。