请问老师我的理解对吗?
Topic source不是吧 L应该类似于指针。 def add_append(L=[]) 系统在内存分配了一个位置给了[] 然后,给那个内存贴上了L这个标签. 因为这个[]是跟着函数同时存在的,所以[]没有被系统删除,应该当程序结束时,[]才被删除。 def add_append(L=None) 这个函数里面的[]应该是当函数运行完后就被删除,所以每次调用add_append()的时候,系统都会重新创建一个[]。 感觉应该是一个动态和静态的问题。
楼上@you_you_k才是正解,系统中存在一个[]类型的对象。第二次调用的时候L对应的 存储单元里面存储的是[]这个对象的地址,这个地址和第一次地址是相同的。所以才会出现 这种结果。
L的本质其实就是一个指针。
def add_end(L=None): if L is None: L = [] return L print(id(add_end())) print(id(add_end()))
通过这段代码可知,两次[]的内存地址相同,所以you_you_k理解错误了
- 1
- 2
脑洞开天
def add_end(L=[]): L.append('END') return L
终于想明白这段代码了,对于可变对象,如果对象内容改变,对象的内存地址不变。
也就是老师说的:Python函数在定义的时候,默认参数L的值就被计算出来了。
老师说的这个‘默认参数L的值’应该不是L的内容,而是L的内存地址。请问我理解的对吗?