0x00 嫌弃的默认可变参数
首先我们先来看一个例子:
def test_func(default_arg=[]):
default_arg.append('rocky0429')
return...明明我们的函数里明明对默认的可变参数赋值了,为什么第 1 次调用是初始化的状态,第 2 次,第 3 次出现的结果就不是我们想要的了呢?...其实出现这样的结果是因为 Python 中函数的默认可变参数并不是每次调用该函数时都会初始化。相反,它们会使用最近分配的值作为默认值。...在自定义函数的特殊属性中,有个「 __defaults__」 会以元组的形式返回函数的默认参数。...2, 3, 1, 2, 3]
>>> l2
[[0, 2, 3], [0, 2, 3], [0, 2, 3]]
解决上面问题和之前我们说过的一样,比如用切片的方法形成一个新的无共享的对象,因为这个的确是以另一种生成共享可变对象的方法