MST

星途 面试题库

面试题:Python函数默认值与可变对象的交互

当函数默认值为可变对象(如列表、字典)时,会出现什么特殊情况?如何避免因这种情况导致的错误?请详细解释并给出代码示例。
15.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

特殊情况

当函数默认值为可变对象时,默认值只会在函数定义时被创建一次。如果在函数内部对这个可变对象进行修改,那么下次调用函数时,默认值将是上次修改后的结果,而不是初始的默认值。这可能导致不符合预期的行为。

避免错误的方法

通常使用 None 作为默认值,然后在函数内部进行判断,如果为 None 则创建新的可变对象。

代码示例

# 错误示例
def bad_function(my_list=[]):
    my_list.append(1)
    return my_list

print(bad_function())  
print(bad_function())  

# 正确示例
def good_function(my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(1)
    return my_list

print(good_function())  
print(good_function())  

在错误示例中,每次调用 bad_function 时,my_list 都是同一个对象,导致每次调用都会在上次修改的基础上继续修改。而在正确示例中,每次调用 good_function 时,如果 my_listNone,则会创建一个新的列表,避免了上述问题。