用切片操作符副本清除python列表

时间:2016-11-13 09:54:35

标签: python python-2.6

我刚刚遇到了python 2.6代码python

for i in elements[:]:
    elements.remove(i)

我试图找出使用此语法清除列表的原因。 我理解inplace删除的概念,但为什么不例如:

del elements[:]

elements[:] = []

Thx!

1 个答案:

答案 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[:] = [](我现在将变量指向一个新的空列表,取消引用后将删除旧箭头)

希望这有帮助!