tl; dr;
mylist.clear() # Added in Python 3.3del mylist[:]
可能是做到这一点的最佳方法。该答案的其余部分试图解释为什么您的其他一些努力不起作用。
cpython至少在引用计数上起作用,以确定何时删除对象。在这里,您对同一对象有多个引用。
a引用相同的对象
c[0]。当您在
c(
for iin c:)上循环时,有时
i还会引用同一对象。该
del关键字删除了一个引用,因此:
for i in c: del i
在其中创建对对象的引用
c,然后删除该引用-但该对象仍具有其他引用(
c例如,其中存储了一个引用),因此它将持久存在。
以相同的方式:
def kill(self): del self
仅删除该方法中对对象的引用。从列表中删除所有引用的一种方法是使用切片分配:
mylist = list(range(10000))mylist[:] = []print(mylist)
显然,您也可以删除切片以删除适当的对象:
del mylist[:] #This will implicitly call the `__delslice__` or `__delitem__` method.
这将从中删除所有引用
mylist,也从所有引用到的引用中删除引用
mylist。与简单删除列表相比-例如
mylist = list(range(10000))b = mylistdel mylist#here we didn't get all the references to the objects we created ...print(b) #[0, 1, 2, 3, 4, ...]
最后,最近的python修订版添加了一种
clear方法,该方法的作用与该方法相同
del mylist[:]。
mylist = [1, 2, 3]mylist.clear()print(mylist)