不同的清单方式

当你想在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 [] [] 

在我看来,德尔会给你回忆,而分配一个新的列表将使旧的删除只有当gc runs.matter。

这对于大型列表可能是有用的,但是对于小型列表应该是可以忽略的。

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

注意

 del old_list[ 0:len(old_list) ] 

相当于

 del old_list[:] 

有两种情况可能需要清除列表:

  1. 你想在代码中进一步使用名字old_list ;
  2. 您希望尽快清理垃圾清单,以释放一些内存;

在第一种情况下,你只是继续分配:

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

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

  del old_list 
 del list[:] 

将删除该列表variables的值

 del list 

将从内存中删除variables本身

要在Python 3.3+中就地清除列表还可以使用list.clear() ,该列表与其他可变容器(例如dictsetdeque )的接口一致。

 old_list.clear() # removes all items from old_list (same as del old_list[:]) 

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

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

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

 del a[:] 

另一个可以正常工作的解决scheme是创build空列表作为参考空列表。

 empt_list = [] 

例如你有一个列表为a_list = [1,2,3] 。 要清除它只需做到以下几点:

 a_list = list(empt_list) 

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