0
Posted on Wednesday, September 18, 2019 by 醉·醉·鱼 and labeled under

《流畅的python》一书中有一小节提到过,不要使用可变类型作为参数的默认值。 碰巧自己刷题的时候没有意识到这个,成功踩雷。在python里面,变量都是对象的引用而已。在下面的例子中,修改一个变量,另外一个变量也会变,因为他们其实是同一个对象。



def f(v = []):
    return v

a = f()
b = f()

a.append(1)

print(a == b) # don't use mutable obj as default param
print(a is b)

c = f()
d = f()

c += [1]
print(id(c))
print(id(d))
print(c == d)
print (c is d)


虽然说可以用 a = a + [1] 来避免,但还是不要用可变类型作为参数默认值。