原文:原因解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
函数中L的定义应该属于局部作用域吧,调用函数add_end(L=[])时,代码执行到return后局部作用域被销毁,再次调用时产生新的作用域定义L,为什么L会变?
函数中L的定义应该属于该函数的局部作用域,发生改变时会在该函数内部被记下来。
局部作用域是没错,但是局部作用域的意义是说局部变量创建后初始化值的确定方式,局部作用域是在函数定义时确定的,可能会有销毁说法,就算要销毁貌似也要等方法出方法区的时候吧.... 所以 参数默认值在函数定义时就已经创建了,如果是引用型数据,创建在了堆中,函数调用时 如果要使用默认参数,就让局部变量指向这个引用内容,所以修改了这个引用的内容,自然会影响该方法后续调用时对应局部变量的值
Sign in to make a reply
星月starnight
原文:原因解释如下:
Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
函数中L的定义应该属于局部作用域吧,调用函数add_end(L=[])时,代码执行到return后局部作用域被销毁,再次调用时产生新的作用域定义L,为什么L会变?