当你想在Python中清除一个列表时,有没有理由做这些比这两行更复杂的事情?
old_list = []
old_list = list()
我问的原因是我刚刚在一些正在运行的代码中看到了这个:
del old_list[ 0:len(old_list) ]
清除列表将影响同一列表的所有其他引用。
例如,此方法不会影响其他引用:
>>> 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[:] = []
清除python列表有一种非常简单的方法。使用del list_name [:]。
例如:
>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []
执行alist = []
不会清除列表,只需创建一个空列表并将其绑定到变量alist
。如果旧列表具有其他变量绑定,则它仍将存在。
要实际清除列表,您可以使用以下任何方式:
alist.clear() # Python 3.3+, most obvious
del alist[:]
alist[:] = []
alist *= 0 # fastest
有关更多详细信息,请参阅Mutable Sequence Types文档页面。
在我看来,del会给你回忆,而分配一个新列表只会在gc runs.matter时删除旧列表。
这对于大型列表可能很有用,但对于小型列表,它应该可以忽略不计。
编辑:作为Algorias,没关系。
注意
del old_list[ 0:len(old_list) ]
相当于
del old_list[:]
在两种情况下,您可能希望清除列表:
old_list
;在案例1中,您继续完成作业:
old_list = [] # or whatever you want it to be equal to
在案例2中,del
语句会将名称old list
指向的列表对象的引用计数减少。如果列表对象仅由名称old_list
at指向,则引用计数将为0,并且将释放该对象以进行垃圾回收。
del old_list
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
一样空列表。