为什么实参为列表时,不需要用return来返回,而是直接可以修改了列表的元素?
不理解“实参是列表时,形参是列表的引用”这句话。
望指导,谢谢!
在 Python 中,函数参数的传递方式既可以是传值也可以是传引用,具体取决于参数的类型。在 Python 中,所有的变量都是对象,而对象可以是可变的或不可变的。
对于不可变类型的对象(如整数、字符串、元组等),函数参数的传递方式是传值,在函数中对这些参数的修改不会影响到函数外部对这些参数的值。例如:
def foo(x):
x = x + 1
print(x)
a = 1
foo(a)
print(a) # 输出为 1,不会影响到函数外部的 a
对于可变类型的对象(如列表、字典等),函数参数的传递方式是传引用,在函数中对这些参数的修改会影响到函数外部对这些参数的值。例如:
def foo(lst):
lst.append(1)
print(lst)
a = [1, 2, 3]
foo(a)
print(a) # 输出为 [1, 2, 3, 1],会影响到函数外部的 a
不过,即使对象是可变的,如果在函数内部重新给参数赋值,那么这个参数就不再是原来的对象,而是一个新的对象,此时函数内部对参数的修改依然不会影响到函数外部对参数的值。例如:
def foo(lst):
lst = [1, 2, 3]
print(lst)
a = [4, 5, 6]
foo(a)
print(a) # 输出为 [4, 5, 6],函数内部重新给 lst 赋值,lst 不再是原来的 a,所以函数对 lst 的修改不会影响到函数外部的 a
实参是列表时,形参是列表的引用
所谓引用,就是指它本身不会把变量复制一份,而是还是指向调用者的那个列表
不仅是列表,对象也是引用
道理很简单,因为列表占用的内存可以很大,如果每次都复制,性能受不了,所以默认不复制,让程序员在需要的时候再复制。