【问题标题】:Explanation about Garbage collection python关于垃圾回收python的解释
【发布时间】:2022-01-23 19:37:17
【问题描述】:

嗨,我不确定这是否与 python 中的垃圾收集有关,但我正在寻找一些关于它如何在后台工作的指导。 以下是我的程序的一部分。

def get_data():

 templist = []

 '''
 does stuff to fill templist with newest data
 '''

 return templist

def save_data(new_list, old_list):

 '''
 loops to check for updates.
 if update, write to file
 '''
 if not old_list:
    for n in new_list:
        write_file(n)
 else:
    for n, o in zip(new_list,old_list):
        if n[1] != o[1]:
            write_file(n)
 return new_list

comparelist = []

while True:

 newlist = get_data()
 comparelist = (save_data(newlist, comparelist))

我检查了 id() 函数,newlist 每次都作为一个新对象传递给 newlist,然后传递给 comparelist(仍然是对 templist 的内存引用。

我的问题是这样的:

  • 每一圈,不再使用的列表是否被销毁?
  • 有没有更好的方法来做到这一点?

【问题讨论】:

  • 真正的问题是:你在担心什么? Python 在进行垃圾回收时会删除一些东西,这可能随时发生。除非出现问题,否则您不应该在意。我已经 30 年不用关心了。
  • @frankYellin 你说得对,我想多了!

标签: python list garbage-collection


【解决方案1】:

如何以及何时收集对象通常不是问题,您应该只关心对它们的强引用保留多长时间,这主要通过确定范围并知道您自己保持哪些对象来解决。

当对象的引用计数降至零时,它被标记为删除,何时发生删除取决于实现。在参考 CPython 实现中,它在到达 0 https://docs.python.org/3/c-api/refcounting.html#c.Py_DECREF 后立即运行

为了节省一点时间,CPython 会在释放后保留一些列表,以便以后重用,以防止每次都创建全新的对象,所以真的没什么好担心的。

【讨论】:

  • 谢谢,我可能想多了:)
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
相关资源
最近更新 更多