0
《流畅的python》一书中有一小节提到过,不要使用可变类型作为参数的默认值。 碰巧自己刷题的时候没有意识到这个,成功踩雷。在python里面,变量都是对象的引用而已。在下面的例子中,修改一个变量,另外一个变量也会变,因为他们其实是同一个对象。
Posted on
Wednesday, September 18, 2019
by
醉·醉·鱼
and labeled under
python
《流畅的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] 来避免,但还是不要用可变类型作为参数默认值。