Python:为什么我函数中的对象返回不同的id()取决于它的调用方式?

时间:2018-03-22 21:32:24

标签: python

我正在尝试调用具有不同参数的函数。现在我从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]

1 个答案:

答案 0 :(得分:4)

默认参数在创建时绑定到函数,它始终是内存中的同一对象。这就是为什么每次调用函数时都会看到相同的id,而不提供第二个参数。

使用第二个参数调用函数时,在新创建的列表中,赋值L=<list called with>在执行任何其他代码之前隐式发生在函数体内。在这种情况下,您会看到新创建的列表的id