在官方Python教程(2.7)中,据说切片生成列表的浅表副本(例如),切片中的每个项目都是对原始列表对象的引用.
例如,做
a = [1,2,3]
a[:][0] = 2
Run Code Online (Sandbox Code Playgroud)
不会改变实际值,因为发生的事情只是切片中的第一个项被引用到一个新对象(即2).
但是,干嘛
a[:] = [] # or any other list
Run Code Online (Sandbox Code Playgroud)
实际上会改变清单.
任何人都可以解释一下吗?
Python教程4.7.1.默认参数值表示以下内容:
重要警告:默认值仅评估一次.当默认值是可变对象(如列表,字典或大多数类的实例)时,这会有所不同.例如,以下函数累积在后续调用中传递给它的参数:
Run Code Online (Sandbox Code Playgroud)def f(a, L=[]): L.append(a) return L print f(1) print f(2) print f(3)这将打印
Run Code Online (Sandbox Code Playgroud)[1] [1, 2] [1, 2, 3]
在内存管理方面,我不太明白"仅评估一次"的含义.显然,函数的默认值在首次调用函数时被计算一次,并且即使在函数结束后也存储在单独的存储器地址中.(根据我的理解,在函数结束后,应该释放所有局部变量?)
我对么?
python ×2