python函数中的可变对象与不可变对象行为

时间:2018-08-03 04:19:15

标签: python function immutability mutable least-astonishment

下面的两段代码产生不同的输出。

def f1(x= []):
    x.append(1)
    return x

print(f1())
print(f1())

输出为:

[1]
[1, 1]

第二个功能:

def f2(x=0):
    x+=1
    return x

print(f2())
print(f2())

输出为:

1
1

现在我知道这是因为“ 1”是int类型并且是不可变的(就像我使用过一个元组一样)。我想了解的是这种逻辑是如何工作的。在这两个函数的开头,您都位于各自函数的名称空间中,并且x具有分配给它的对象。为什么仅在第二种情况下将其重新分配为“ 0”?谢谢。

0 个答案:

没有答案