En Tue, 09 Dec 2008 15:29:17 -0200, Philip Semanchuk <[EMAIL PROTECTED]> escribió:
On Dec 9, 2008, at 11:35 AM, Albert Hopkins wrote:

       def myfunction():
           # do some stuff stuff
           my_string = function_that_returns_string()
           # do some stuff with my_string
           del my_string
           # do some other stuff
           return

I think this looks ugly, but also does it not hurt performance by
preempting the gc?  My feeling is that this is a misuse of 'del'. Am I
wrong?  Is there any advantage of doing the above?

The code above doesn't pre-empt the GC, it just provides it with a useful hint. When you del a variable you just tell the GC, "I'm done with this, so you might be able to get rid of it next time you collect garbage". If the variable wasn't explicitly del-ed, you'd still hold a reference and the GC would be unable to collect it while the section "do some other stuff" runs.

Note that CPython has a garbage collector AND uses reference counts. Objects are deallocated *immediately* as soon as their reference count reaches zero. The GC is used only to detect and dispose of reference cycles. So, if you `del` a name and it happens to be the last reference to certain object, the object is immediately destroyed; the GC isn't involved at all.

On rare occasions (I can think of once or twice in all the Python I've written) I'll del a variable that might use lots of memory if it wouldn't otherwise get dereferenced quickly (say, by going out of scope). But in my experience that's quite rare.

Yes, I've seldom used "del" in those circumstances too. And inside an exception handler. I can't remember of other cases.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to