Skip to content

向函数传递可变类型对象

当可变对象(list, dict)作为参数传递给函数时,对函数体中相应形参所做的任何修改都会导致原始对象的修改。

因此,在传递可变对象时应格外小心。

传递列表

代码

python
def repeat(lst): # 使用 lst 而不是 l,避免与全局变量混淆
    """将列表中的每个元素乘以 2 (原地修改)"""
    for i in range(len(lst)):
        lst[i] = lst[i]*2
    print("函数内部修改后:", lst)

my_list = [1, 2, 3]
print("调用前:", my_list)
repeat(my_list)
#my_list 被修改了
print("调用后:", my_list)

输出

调用前: [1, 2, 3]
函数内部修改后: [2, 4, 6]
调用后: [2, 4, 6]

传递字典

代码

python
def repeat(dct): # 使用 dct
    """将字典中每个值乘以 2 (原地修改)"""
    for key in dct: # 遍历键
        dct[key] = dct[key]*2
    print("函数内部修改后:", dct)

my_dict = {'a':1, 'b':2, 'c':3}
print("调用前:", my_dict)
repeat(my_dict)
#my_dict 被修改了
print("调用后:", my_dict)

输出

调用前: {'a': 1, 'b': 2, 'c': 3}
函数内部修改后: {'a': 2, 'b': 4, 'c': 6}
调用后: {'a': 2, 'b': 4, 'c': 6}