为什么这两种追加方法产生不同的结果?

时间:2012-07-17 19:56:19

标签: python list append

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

我正在尝试理解以下两种方法之间的区别:

def first_append(new_item, a_list=[]):
    a_list.append(new_item)
    return a_list

def second_append(new_item, a_list=None):
    if a_list is None:
        a_list = []
    a_list.append(new_item)
    return a_list

first_append在多次调用时会不断添加a_list,导致其增长。但是,second_append始终返回长度为1的列表。这里有什么区别?

示例:

>>> first_append('one')
['one']
>>> first_append('two')
['one', 'two']
>>> second_append('one') 
['one']
>>> second_append('two')
['two']

1 个答案:

答案 0 :(得分:0)

函数second_append每次调用时都会为您创建一个新的本地列表。