关于垃圾收集的解释 python
Explanation about Garbage collection python
您好,我不确定这是否与 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 的内存引用。
我的问题是:
- 每一圈,不再使用的列表是否被销毁?
- 有更好的方法吗?
如何以及何时收集对象通常不是问题,您应该只关心您将对它们的强引用保留多长时间,这主要通过确定范围并了解您自己保留哪些对象来解决。
当对象的引用计数下降到零时,它被标记为删除,何时发生删除取决于实现。在参考CPython实现中,它到达0后立即运行https://docs.python.org/3/c-api/refcounting.html#c.Py_DECREF
为了节省一点时间,CPython 会在释放后保留一些列表,以便以后重复使用,以防止每次都创建全新的对象,所以真的没有什么可担心的。
您好,我不确定这是否与 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 的内存引用。
我的问题是:
- 每一圈,不再使用的列表是否被销毁?
- 有更好的方法吗?
如何以及何时收集对象通常不是问题,您应该只关心您将对它们的强引用保留多长时间,这主要通过确定范围并了解您自己保留哪些对象来解决。
当对象的引用计数下降到零时,它被标记为删除,何时发生删除取决于实现。在参考CPython实现中,它到达0后立即运行https://docs.python.org/3/c-api/refcounting.html#c.Py_DECREF
为了节省一点时间,CPython 会在释放后保留一些列表,以便以后重复使用,以防止每次都创建全新的对象,所以真的没有什么可担心的。