python函数可以改变实际参数的值吗_关于python中修改函数参数的问题?

参数的传递是通过自动将对象赋值给本地变量名来实现的。在函数运行时,函数头部的参数名是一个新的、本地的变量名,这个变量名是在函数的本地作用域内存在。参数的传递本质上就是python赋值的另一个实例而已。

那么,这个问题分为可变对象和不可变对象两种情况进行讨论:

在原处改变函数的可变对象参数的值会对调用者有影响。函数能够就地改变传入的可变对象,因此其结果会影响调用者,这其实和前面介绍过的对象赋值原理是一样的;

而不可变对象的引用重新赋值会指向新的对象,因此不会改变调用者。

先看一个不可变对象的例子

def f(a):

a = 99

print(a)

b = 88

f(b)

print(b)

99

88

在函数中修改a对于调用函数的地方没有任何影响,因为他在函数内部直接把本地变量a重置为了一个完全不同的新对象,所以他不会影响最初的变量b

而当参数传递像列表和字典这样的可修改对象的时候,我们还需要注意,对这样的可变对象的原处修改可能在函数退出后依然有效,并由此影响到调用者。

def change(a,b):

a = 2

b[0] = 'spam'

x = 1

l = [1,2]

change(x,l)

print(x,l)

1 ['spam', 2]

再次对比可以看出,调用者的不可变变量x没有受到影响,而可变变量L在函数内部进行本地修改,并影响到了自身

可以看出,对于参

你可能感兴趣的:(python函数可以改变实际参数的值吗_关于python中修改函数参数的问题?)