2024年05月13日 python 传参如何传引用 极客笔记
在Python中,函数的参数传递方式有两种:传值和传引用。传值即传递参数的值副本,而传引用则是传递参数的引用(内存地址)。
在Python中,几乎所有的对象都是通过引用传递的。但是,对于不可变对象(如整数、字符串、元组),函数的参数传递方式类似于传值;而对于可变对象(如列表、字典、集合),函数的参数传递方式类似于传引用。
def change_num(num):
num += 10
num = 5
change_num(num)
print(num) # 输出 5
在上面的示例中,函数change_num
的参数是一个整数num
,在函数内部将num
的值增加了10。但是在函数外部打印num
的值仍然是5,这是因为函数参数传递的是参数值的副本,所以在函数内部对参数的修改不会影响外部变量的值。
def change_list(lst):
lst.append(4)
my_list = [1, 2, 3]
change_list(my_list)
print(my_list) # 输出 [1, 2, 3, 4]
在上面的示例中,函数change_list
的参数是一个列表lst
,在函数内部往lst
中添加了一个元素4。在函数外部打印my_list
的值为[1, 2, 3, 4]
,这是因为函数参数传递的是参数的引用,所以在函数内部对参数的修改会影响外部变量的值。
当传递不可变对象(如整数、字符串、元组)时,函数内部对参数的修改不会影响外部变量的值。
def change_str(s):
s += ' world'
my_str = 'hello'
change_str(my_str)
print(my_str) # 输出 hello
当传递可变对象(如列表、字典、集合)时,函数内部对参数的修改会影响外部变量的值。
def change_dict(d):
d['c'] = 3
my_dict = {'a': 1, 'b': 2}
change_dict(my_dict)
print(my_dict) # 输出 {'a': 1, 'b': 2, 'c': 3}
虽然不可变对象的值不能被修改,但是可以通过操作对象的引用来改变对象的值。
def change_int(num_list):
num_list[0] += 10
num_list = [5]
change_int(num_list)
print(num_list) # 输出 [15]
在上面的示例中,虽然num_list
是一个整数的列表,而整数是不可变对象,但是通过改变列表的元素值实现了整数的修改。
在Python中,函数的参数传递方式类似于传值和传引用的结合体。对于不可变对象,函数内部对参数的修改不会影响外部变量的值;而对于可变对象,函数内部对参数的修改会影响外部变量的值。这种机制让Python在处理参数传递时非常灵活。
本文链接:http://so.lmcjl.com/news/4442/