清除列表的不同方式

问题描述 投票:192回答:8

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

old_list = []
old_list = list()

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

del old_list[ 0:len(old_list) ]
python list
8个回答
344
投票

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

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

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

35
投票

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

例如:

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

14
投票

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

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

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

有关更多详细信息,请参阅Mutable Sequence Types文档页面。


13
投票

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

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

编辑:作为Algorias,没关系。

注意

del old_list[ 0:len(old_list) ]

相当于

del old_list[:]

5
投票

在两种情况下,您可能希望清除列表:

  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

4
投票
del list[:] 

将删除该列表变量的值

del list

将从内存中删除变量本身


3
投票

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

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

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

del a[:]

-4
投票

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

empt_list = []

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

a_list = list(empt_list)

这将使a_listempt_list一样空列表。

© www.soinside.com 2019 - 2024. All rights reserved.