我有一个迭代对象的列表。你知道吗
在每个循环之后,我想将该对象设置为None并强制垃圾收集器运行。你知道吗
但是我不知道如何分配对象而不是元素。例如:
a = [ object1, object2, object3]
for i in xrange(0,len(a)]:
#do something with object
....
#done working on object
a[i] = None <-- This sets element i to None and leaves the object intact.
我之所以尝试这样做,是因为我使用了一个机器学习库,并遍历了许多分类器。分类器在内存中保存了大量的预测。因此,一旦我将预测写入CSV,我就不再需要它们了。这就是为什么在每个循环结束时,我希望删除分类器,然后运行gc.收集()并在理想情况下改进内存管理。你知道吗
所以问题是,如何将对象赋给None?你知道吗
正如@thefourtheye:
当您分配
None
并且不存在其他引用时,对象将被自动标记为GC。你不必明确地触发它。你知道吗通过将
None
分配给列表索引,可以减少实际对象的引用计数。当您说a[i] = None
时,您将a[i]
处对象的引用计数减少1
。如果它有引用计数1
,那么它将到达0
,并且由于没有任何对象不再引用该对象,它将准备好进行GC。你知道吗相关问题 更多 >
编程相关推荐