Ich versuche, ein Speicherleck in Python (2.7) zu verfolgen. Ich habe gc.get_referrers gefunden, aber verstehe die Ausgabe nicht. Nach dem Löschen dying_node
(die von allen Referenzen zu befreien, außer für eine Liste, die ich als Teil meiner Jagd geschaffen bekommen sollte), habe ich in meinem Code:Verständnis gc.get_referrers
gc.collect()
print "done dying: ", getrefcount(dying_node) #note, includes the reference from getrefcount
referrers = gc.get_referrers(dying_node)
print "referrers: "
for referrer in referrers:
print referrer
, die die Ausgabe ergibt:
> done dying: 4
> referrers:
> [<__main__.Node instance at 0x104e53cb0>, <__main__.Node instance at 0x104e53b90>, <__main__.Node instance at 0x104e53b00>, <__main__.Node instance at 0x104e53d40>, <__main__.Node instance at 0x104e53ab8>, <__main__.Node instance at 0x104e53bd8>, <__main__.Node instance at 0x104e53a70>, <__main__.Node instance at 0x104e53c20>, <__main__.Node instance at 0x104e53c68>, <__main__.Node instance at 0x104e53b48>]
> [<__main__.Node instance at 0x104e53c20>, <__main__.Node instance at 0x104e53ab8>, <__main__.Node instance at 0x104e53c68>, <__main__.Node instance at 0x104e53a70>, <__main__.Node instance at 0x104e53cb0>, <__main__.Node instance at 0x104e53b00>, <__main__.Node instance at 0x104e53d40>, <__main__.Node instance at 0x104e53b90>, <__main__.Node instance at 0x104e53b48>, <__main__.Node instance at 0x104e53bd8>]
> <frame object at 0x104516300>
Ich denke, das bedeutet, ich habe zwei Listen von Node
s, die auf diesen Knoten und ein Rahmenobjekt beziehen. Ich nehme an, das Rahmenobjekt ist der Name dying_node
, den ich betrachte. Eine der Listen wäre eine Liste, die ich erstellt habe, um mir bei meiner Jagd zu helfen. Aber gibt es eine Möglichkeit, herauszufinden, was die andere Liste wäre?