我刚刚遇到了python 2.6代码python
for i in elements[:]:
elements.remove(i)
我试图找出使用此语法清除列表的原因。 我理解inplace删除的概念,但为什么不例如:
del elements[:]
或
elements[:] = []
Thx!
答案 0 :(得分:0)
您必须将Python列表视为'指针'。
例如,如果您声明一个类似的列表:
elements = [1, 2, 3]
这将在内存中看到如下:
elements → [ ↓, ↓, ↓ ]
1 2 3
因此,当您更改列表中的元素时,您正在执行以下操作:
elements[1] = 4
4
elements → [ ↓, ↑, ↓ ]
1 2 3
注意数字2没有指针引用,因此它将从存储器中消失或丢失'并且它不再可访问。因此,当您重新分配变量时也会发生同样的情况:
elements[:] = []
[]
elements ↑ [ ↓, ↓, ↓ ]
1 4 3
这里要理解的关键是,原始列表也会消失或者从内存中丢失。并且它不再可访问。理解的另一个重要关键是切片:
elements[:]
获取变量所指的指针(或插图中的箭头)。
这就是为什么它与
完全相同的原因 del elements[:]
(我删除箭头并将新箭头设置为空列表)
或
elements[:] = []
(我现在将变量指向一个新的空列表,取消引用后将删除旧箭头)
希望这有帮助!