有没有办法找出修改或创建列表的行或功能?

时间:2020-08-29 17:26:21

标签: python list memory-leaks garbage-collection reference-counting

我在使用gc.get_referrers的python程序中发现了可能的内存泄漏,但是我找不到哪个对象拥有该对象:

class Foo:
    def __init__(self, i, j):
        self.i = i
        self.j = j

def do_stuff(obj):
    # do stuff with obj

    objs = gc.get_objects()
    ls = [obj for obj in objs if isinstance(obj, Foo)]
    foo = ls[0]
    refs = gc.get_referrers(foo)
    l = None
    for ref in refs:
        if type(ref) == list:
            if len(ref) > 1000:
                l = ref
    objgraph.show_backrefs([gc.get_referrers(l)[0]], filename='sample-backref-graph.png')

这只是给我一个这样的图形:

Foo object <--- list of 100k foo object <--- list of lists

试图递归地找到它,但是我找不到任何不是列表的东西。那么,有没有办法找出哪个函数写入了此列表,或者至少找到了创建该函数的那一行?

0 个答案:

没有答案