<div dir="ltr"><div class="gmail_quote">On Fri, Mar 30, 2012 at 21:30, Benjamin Peterson <span dir="ltr">&lt;<a href="mailto:benjamin@python.org">benjamin@python.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div class="h5">
&gt; +    def test_cyclic_gc(self):<br>
&gt; +        class ShowGC:<br>
&gt; +            def __init__(self, flaglist):<br>
&gt; +                self.flaglist = flaglist<br>
&gt; +            def __del__(self):<br>
&gt; +                self.flaglist.append(1)<br>
<br>
</div></div><br>I think a nicer way to check for cyclic collection is to take a<br>
weakref to an object, call the GC, then check to make sure the weakref<br>
is broken.<br>
<div class="im"><br>
&gt; +<br>
&gt; +        # Test the shortest cycle: lst-&gt;element-&gt;lst<br>
&gt; +        fl = []<br>
&gt; +        lst = [ShowGC(fl)]<br>
&gt; +        lst.append(ET.Element(&#39;joe&#39;, attr=lst))<br>
&gt; +        del lst<br>
&gt; +        gc.collect()<br>
<br>
</div>support.gc_collect() is preferable<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; +        self.assertEqual(fl, [1])<br>
&gt; +<br>
&gt; +        # A longer cycle: lst-&gt;e-&gt;e2-&gt;lst<br>
&gt; +        fl = []<br>
&gt; +        e = ET.Element(&#39;joe&#39;)<br>
&gt; +        lst = [ShowGC(fl), e]<br>
&gt; +        e2 = ET.SubElement(e, &#39;foo&#39;, attr=lst)<br>
&gt; +        del lst, e, e2<br>
&gt; +        gc.collect()<br>
&gt; +        self.assertEqual(fl, [1])<br>
<br></div></div></blockquote></div><br>Thanks for the insights, Benjamin. I&#39;ll explore these alternatives and will submit a fix.<br><br>Eli<br><br><br><br><br></div>