清除列表的不同方式

时间:2009-05-12 01:46:56

标签: python list

当你想在Python中清除一个列表时,有没有理由做比这两行更复杂的事情?

old_list = []
old_list = list()

我问的原因是我在一些正在运行的代码中看到了这个:

del old_list[ 0:len(old_list) ]

8 个答案:

答案 0 :(得分:341)

清除列表将影响同一列表的所有其他引用。

例如,此方法不会影响其他引用:

>>> a = [1, 2, 3]
>>> b = a
>>> a = []
>>> print(a)
[]
>>> print(b)
[1, 2, 3]

但是这个确实:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]      # equivalent to   del a[0:len(a)]
>>> print(a)
[]
>>> print(b)
[]
>>> a is b
True

你也可以这样做:

>>> a[:] = []

答案 1 :(得分:35)

清除python列表有一种非常简单的方法。使用 del list_name [:]

例如:

>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []

答案 2 :(得分:14)

执行alist = []不会清除列表,只创建一个空列表并将其绑定到变量alist。如果旧列表具有其他变量绑定,则它仍然存在。

要实际清除就地列表,您可以使用以下任何一种方式:

  1. alist.clear() # Python 3.3+, most obvious
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0 # fastest
  5. 有关详细信息,请参阅Mutable Sequence Types文档页面。

答案 3 :(得分:13)

在我看来del会给你回忆,而分配一个新的列表只会在gc runs.matter时删除旧的。

这对于大型列表可能很有用,但对于小型列表,它应该可以忽略不计。

编辑:作为Algorias,没关系。

请注意

del old_list[ 0:len(old_list) ]

相当于

del old_list[:]

答案 4 :(得分:5)

有两种情况可能需要清除列表:

  1. 您希望在代码中进一步使用名称old_list;
  2. 您希望尽快将旧列表垃圾收集以释放一些内存;
  3. 在案例1中,您继续使用该分配:

        old_list = []    # or whatever you want it to be equal to
    

    在案例2中,del语句会将名称old list指向的列表对象的引用计数减少。如果列表对象仅由名称old_list指向,则引用计数将为0,并且将释放该对象以进行垃圾回收。

        del old_list
    

答案 5 :(得分:4)

del list[:] 

将删除该列表变量的值

del list

将从内存中删除变量本身

答案 6 :(得分:3)

如果您要清除列表,显然,您不再需要该列表了。如果是这样,您可以通过简单的del方法删除整个列表。

a = [1, 3, 5, 6]
del a # This will entirely delete a(the list).

但是如果你再次需要它,你可以重新初始化它。或者只是简单地通过

清除它的元素
del a[:]

答案 7 :(得分:-4)

另一个正常工作的解决方案是将空列表创建为引用空列表。

empt_list = []
例如,您有一个列表a_list = [1,2,3]。要清除它,请执行以下操作:

a_list = list(empt_list)

这会使a_list成为空列表,就像empt_list

一样