python 传参如何传引用

2024年05月13日 python 传参如何传引用 极客笔记

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/

展开阅读全文