以下python代码:
def test_function(a = []):
a.append('x')
print(a)
test_function()
test_function()
印刷:
['x']
['x', 'x']
似乎a=[]
默认赋值只使用一次,之后a
被视为函数的属性,除非在再次调用函数时重新赋值(例如test_function(a=['hello'])
)。该行为在 Python2.x 和 3.x 之间共享,因此我认为它不被视为设计缺陷。
我想知道:
- 这种行为的机制是什么?
- 这种行为背后的原因是什么?(这对我来说似乎很困惑)