Python中函数的默认可变参数并不是每次调用该函数时都会被初始化. 相反, 它们会使用最近分配的值作为默认值.什么时候会分配值
>>> def some_func(default_arg1=[], default_arg2=[]):
... default_arg1.append('start')
... default_arg2.append('end')
... default_arg1.append(default_arg2)
... return default_arg1, default_arg2
>>> some_func.__defaults__
([], [])
>>> some_func()
(['start', ['end']], ['end'])
>>> some_func.__defaults__
(['start', ['end']], ['end'])
>>> some_func([])
(['start', ['end', 'end']], ['end', 'end'])
>>> some_func.__defaults__
(['start', ['end', 'end']], ['end', 'end'])
>>> some_func([])
(['start', ['end', 'end', 'end']], ['end', 'end', 'end'])
>>> some_func.__defaults__
(['start', ['end', 'end', 'end']], ['end', 'end', 'end'])
>>> some_func([],[])
(['start', ['end']], ['end'])
>>> some_func.__defaults__ #默认值为什么没有重新分配???
(['start', ['end', 'end', 'end']], ['end', 'end', 'end'])
>>> some_func()
(['start', ['end', 'end', 'end', 'end'], 'start', ['end', 'end', 'end', 'end']], ['end', 'end', 'end', 'end'])
>>> some_func.__defaults__
(['start', ['end', 'end', 'end', 'end'], 'start', ['end', 'end', 'end', 'end']], ['end', 'end', 'end', 'end'])