当你想在Python中清除一个列表时,有没有理由做比这两行更复杂的事情?
old_list = []
old_list = list()
我问的原因是我在一些正在运行的代码中看到了这个:
del old_list[ 0:len(old_list) ]
答案 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
。如果旧列表具有其他变量绑定,则它仍然存在。
要实际清除就地列表,您可以使用以下任何一种方式:
alist.clear() # Python 3.3+, most obvious
del alist[:]
alist[:] = []
alist *= 0 # fastest
有关详细信息,请参阅Mutable Sequence Types文档页面。
答案 3 :(得分:13)
在我看来del会给你回忆,而分配一个新的列表只会在gc runs.matter时删除旧的。
这对于大型列表可能很有用,但对于小型列表,它应该可以忽略不计。
编辑:作为Algorias,没关系。
请注意
del old_list[ 0:len(old_list) ]
相当于
del old_list[:]
答案 4 :(得分:5)
有两种情况可能需要清除列表:
old_list
; 在案例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
。