不同的清除列表的方法

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

old_list = []
old_list = list()

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

del old_list[ 0:len(old_list) ]
381306 次浏览

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

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

>>> 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[:] = []

在我看来,del会把内存还给你,而分配一个新的列表将使旧的列表只在gc运行.matter时被删除。

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

编辑:作为Algorias,这并不重要。

请注意,

del old_list[ 0:len(old_list) ]

等于

del old_list[:]

在以下两种情况下,您可能需要清除列表:

  1. 你想在你的代码中进一步使用名字old_list;
  2. 你希望旧的列表尽快被垃圾收集,以释放一些内存;

在情况1中,你只要继续做作业

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

在情况2中,del语句将减少old list所指向的列表对象的引用计数。如果列表对象仅由名称old_list at指向,则引用计数将为0,并且该对象将被释放用于垃圾收集。

    del old_list

有一个非常简单的方法来清除python列表。使用德尔list_name [:]

例如:

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

是否会删除该列表变量的值

del list

将从内存中删除变量本身

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

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

但如果你再次需要它,你可以重新初始化它。或者只是简单地清除它的元素

del a[:]

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

empt_list = []

例如,你有一个列表a_list = [1,2,3]。要清除它,只需执行以下命令:

a_list = list(empt_list)

这将使a_list成为一个空列表,就像empt_list一样。

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

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

  1. alist.clear() # Python 3.3+, most obvious
  2. del alist[:]
  3. alist[:] = []
  4. alist *= 0 # fastest

更多细节请参见可变序列类型文档页。