python的gc包文档说明了有关gc.get_count()的信息:

gc.get_count()
    Return the current collection counts as a tuple of (count0, count1, count2).

这是一个示例程序:
import gc


if __name__=="__main__":
    print("making some data")
    for k in range(10):
        root = [range(i,1000) for i in range(1,1000)]
    print("len(gc.get_objects):",len(gc.get_objects()))
    print("gc.get_stats:",gc.get_stats())
    print("gc.get_count:",gc.get_count())

这是输出:
making some data
len(gc.get_objects): 7130
gc.get_stats: [{'collections': 16, 'collected': 99, 'uncollectable': 0}, {'collections': 1, 'collected': 0, 'uncollectable': 0}, {'collections': 0, 'collected': 0, 'uncollectable': 0}]
gc.get_count: (75, 5, 1)

显然,count0 = 75,count1 = 5,count2 = 1。

什么是count0,count1和count2?

最佳答案

不幸的是,@ user10637953提供的答案和所引用的文章都是错误的。count0是自上次垃圾回收以来发生的(跟踪的对象分配-释放)。
达到gen0阈值(默认值为700)后的某个时间,将发生gen0垃圾回收,并且count0将重置。count1是自上一个gen1集合以来的gen0集合数。达到阈值(默认为10)后,将发生gen1收集,并且count1将重置。count2是自上一个gen2集合以来的gen1集合数。达到阈值(也默认为10)时,将进行gen2收集,并且count2将重置。
您可以通过运行gc.collect(gen)轻松证明自己,并使用gc.get_threshold()查看阈值。
有关更多信息,请参见official dev guide

10-07 23:32