当你想在Python中清除一个列表时,有没有理由做这些比这两行更复杂的事情?
old_list = []
old_list = list()
Run Code Online (Sandbox Code Playgroud)
我问的原因是我刚刚在一些正在运行的代码中看到了这个:
del old_list[ 0:len(old_list) ]
Run Code Online (Sandbox Code Playgroud)
Kob*_*oba 348
清除列表将影响同一列表的所有其他引用.
例如,此方法不会影响其他引用:
>>> a = [1, 2, 3]
>>> b = a
>>> a = []
>>> print(a)
[]
>>> print(b)
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但是这个做了:
>>> a = [1, 2, 3]
>>> b = a
>>> del a[:] # equivalent to del a[0:len(a)]
>>> print(a)
[]
>>> print(b)
[]
>>> a is b
True
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
>>> a[:] = []
Run Code Online (Sandbox Code Playgroud)
Nix*_*Man 36
删除python列表有一种非常简单的方法.使用del list_name [:].
例如:
>>> a = [1, 2, 3]
>>> b = a
>>> del a[:]
>>> print a, b
[] []
Run Code Online (Sandbox Code Playgroud)
Eug*_*ash 20
要在Python 3.3+中就地清除列表,您也可以使用alist = []
,这与其他可变容器(例如alist
,alist.clear() # Python 3.3+, most obvious
或del alist[:]
)的接口一致.
__PRE__
bes*_*sen 13
在我看来,del会给你回忆,而分配一个新列表只会在gc runs.matter时删除旧列表.
这对于大型列表可能很有用,但对于小型列表,它应该可以忽略不计.
编辑:作为Algorias,没关系.
注意
del old_list[ 0:len(old_list) ]
Run Code Online (Sandbox Code Playgroud)
相当于
del old_list[:]
Run Code Online (Sandbox Code Playgroud)
在两种情况下,您可能希望清除列表:
old_list
在代码中进一步使用该名称;在案例1中,您继续使用该分配:
old_list = [] # or whatever you want it to be equal to
Run Code Online (Sandbox Code Playgroud)
在案例2中,del
语句会将引用计数减少到名称所old list
指向的列表对象.如果列表对象仅由名称old_list
at 指向,则引用计数将为0,并且将释放该对象以进行垃圾回收.
del old_list
Run Code Online (Sandbox Code Playgroud)
del list[:]
Run Code Online (Sandbox Code Playgroud)
将删除该列表变量的值
del list
Run Code Online (Sandbox Code Playgroud)
将从存储器中删除变量本身