【 在 ooolinux 的大作中提到: 】
: 如图:[upload=1][/upload]
python参数传递, 在参数类型是容器的时候, 由于性能考量,实际上传递是引用, 而不是传容器内的值
(如果, 需要传值则需要使用copy或deepcoy进行强制复制)。
这个函数定义了一个默认容器参数的参数, 来充当默认值, 这个默认参数实际上也是按照引用传递,
这就导致了, 多次使用默认参数的调用,实际上会共享同一个变量, 从而导致看似相同参数,不同调用形成不同结果。
def func(ls=[])
大概的逻辑是相当于ls是 func函数的一个静态变量, 它在第一次默认参数调用时生成,func函数本身也是对象, 函数对象生存期这个默认参数对象应该都存在。 每次默认参数调用都用的这个默认对象, 但因为时引用 并不会像传值的参数那样每次重新生成,因此, 它的默认值也只是对象生成的时候初始过一次。
这个行为确实怪异,(合理的是默认值调用应该每次初始新的默认值对象, 不是默认值才会生成传入参数的引用,这样相同的值,返回相同的结果才更说的过去)
--
修改:poggy FROM 115.171.155.*
FROM 115.171.155.*