On Sun, May 3, 2015 at 2:43 PM, Ian Kelly <ian.g.ke...@gmail.com> wrote: > On Sat, May 2, 2015 at 2:17 PM, Tim Chase <python.l...@tim.thechases.com> > wrote: >> If you know that you're creating such cyclical structures, it's best >> to manually unlink them before freeing them: >> >> lst = [] >> lst.append(lst) # create the cycle >> lst[:] = [] # break the cycle >> # or lst.remove(lst) # though this takes more care >> del lst > > In general, this shouldn't be necessary. I believe that reference > cycles are guaranteed to be cleaned up in all major implementations of > Python, except that in CPython prior to version 3.4 reference cycles > containing objects with finalizers would not be collected. So the > better advice would be "don't use finalizers in reference cycles if > you need compatibility with Python 3.3 or earlier."
It's not strictly necessary, but you can help things along by breaking the cycle - if you're doing this kind of thing in a loop, breaking the cycle will most likely give more consistent memory usage, whereas the GC will potentially pick up a bunch of them all at once. In simple applications, it's not a big deal either way. Just write your code, and let Python worry about memory. But if it doesn't cost you much to break the loop, you may as well do it Sometimes it even improves code clarity - showing that you're definitely done with this thing now, even though in theory you might still be iterating over it. Just don't warp your code around memory usage, because that's not what Python's meant for. :) ChrisA -- https://mail.python.org/mailman/listinfo/python-list