我在 Expert Python Programming 中读到过这个极端案例。检查此代码:
def f(arg={}):
arg['3'] = 4
return arg
>>> print f()
{'3': 4}
>>> res = f()
>>> res['4'] = 'Still here'
>>> print f()
{'3': 4, '4': 'Still here'}
我不清楚为什么f
最后一次调用时(在保存其返回值之后),而不是分配 arg 空字典(因为它是在没有参数的情况下调用的),而是保留旧的引用。
这本书是这样说的:“如果在参数中创建了一个对象,那么如果函数返回该对象,则参数引用仍然有效”。
我明白“这就是它的工作方式”,但为什么会这样呢?