我正在尝试调用具有不同参数的函数。现在我从Python Docs(Python Tutorial 4.7.1。定义函数)中了解到 - 函数会累积在后续调用中传递给它的参数。因为在第一次调用之后,我期望我的函数中列表对象的id()
保持不变,但事实并非如此。为什么id()'s
不同?
def f(a, L=[]):
print(id(L))
L.append(a)
return L
>>> f(1)
2053668960840
[1]
>>> f(1)
2053668960840
[1, 1]
>>> f(1,[9])
2053668961032
[9, 1]
>>> f(1,[9])
2053669026888
[9, 1]
>>> f(1,[9])
2053668961032
[9, 1]
>>> f(1,[9])
2053669026888
[9, 1]
答案 0 :(得分:4)
默认参数在创建时绑定到函数,它始终是内存中的同一对象。这就是为什么每次调用函数时都会看到相同的id
,而不提供第二个参数。
使用第二个参数调用函数时,在新创建的列表中,赋值L=<list called with>
在执行任何其他代码之前隐式发生在函数体内。在这种情况下,您会看到新创建的列表的id
。