【发布时间】:2018-02-28 17:56:18
【问题描述】:
考虑以下代码来说明建议:
import mod
f1s = ["A1", "B1", "C1"]
f2s = ["A2", "B2", "C2"]
for f1, f2 in zip(f1s,f2s):
# Creating an object
acumulator = mod.AcumulatorObject()
# Using object
acumulator.append(f1)
acumulator.append(f2)
# Output of object
acumulator.print()
所以,我在for 开头使用了一个类的实例来执行一个操作。对于for 中的每个元组,我需要执行相同的操作,但是我不能使用相同的对象,因为它会添加最后一次迭代的效果。因此,在每次迭代开始时,我都会创建一个新实例。
我的问题是这样做是否会造成内存泄漏?对于创建的每个对象,我必须执行什么操作? (可能删除它?或者通过将新对象分配给它被清除的相同名称?)
【问题讨论】:
-
据我了解,一旦引用计数达到零,对象就会在下一个 GC 周期中被垃圾回收。所以答案是否定的,因为变量
acumulator将不再指向在上一次循环迭代中创建的对象,GC 将在下一次遍历中将其擦除,无需显式执行。 -
这不会对 Python 造成任何问题。 Python 是一种内存管理语言,在这里,引用计数将负责回收对象。
-
@juanpa.arrivillaga 尽管您应该关注文件指针等系统资源——特别是在不使用 GC 引用计数的实现上——尤其是 Pypy、Jython 和 IronPython。
-
@PauloScardine 是的,确实如此。我想说人们也应该担心 CPython 中的这些事情。
标签: python python-3.x