请解释python如何执行以下代码:

请解释python如何执行以下代码:,python,function,scope,namespaces,interpreter,Python,Function,Scope,Namespaces,Interpreter,我对下面代码生成的输出很感兴趣。 有人能解释一下为什么python在第三次执行函数调用时打印[1,5]而不仅仅是[5],以及它是python中的一个特性还是一个bug吗 def funn(arg1, arg2=[]): arg2.append(arg1) print(arg2) funn(1) funn(2, [3, 4]) funn(5) 有一篇关于这方面的好文章。但是为了更好地理解,我对你的函数做了一个小小的修改,以便更好地可视化问题 def funn(arg1, arg2

我对下面代码生成的输出很感兴趣。 有人能解释一下为什么python在第三次执行函数调用时打印[1,5]而不仅仅是[5],以及它是python中的一个特性还是一个bug吗

def funn(arg1, arg2=[]):
    arg2.append(arg1)
    print(arg2)
funn(1)
funn(2, [3, 4])
funn(5)

有一篇关于这方面的好文章。但是为了更好地理解,我对你的函数做了一个小小的修改,以便更好地可视化问题

def funn(arg1, arg2=[]):
    print(id(arg2))
    arg2.append(arg1)
    print(arg2)
funn(1) # here you will get printed an id of arg2
funn(2, [3, 4]) # here it's a different id of arg2 because it's a new list
funn(5) # here you will see that the id of the arg2 is the same as in the first function call.

我认为这是因为
arg2
仅在第一次调用它时才被分配默认值(空数组)。然后,不提供值的任何后续调用将使用最初创建的相同实例。因此,3调用将使用在第一次调用中创建的数组,该数组已经附加了
1
。谢谢Tudor。那太有帮助了!