<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hello,</div><div>    Can someone explain me why gc(CPython) can not collect recursive closure's cycle reference?  There is no __del__ here, why gc can not collect?</div><div>    <span style="line-height: 1.7;">Thanks a  lot.</span></div><div><br></div><div>For example:</div><div><div>#!/usr/bin/env python</div><div><br></div><div>import ipdb</div><div>import gc</div><div><br></div><div>gc.set_debug(gc.DEBUG_LEAK)</div><div><br></div><div>def A():</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>N = [1]</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>def aa(n):</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>if n in N:</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>return 1</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>else:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>return n * aa(n-1)</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>x = 33 + aa(10)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>#ipdb.set_trace()</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>print x </div><div><br></div><div><br></div><div>if __name__ == '__main__':</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>while xrange(1000):</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>A()</div></div><div><br></div><div><br></div><br><br><br><div>--<br><div>Best</div><div>    Li Tianqing</div></div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>