Marco Sulla wrote:
> I can be wrong, but for what I know, del variable_name does not
> optimize the code, in the sense of performance.

Correct, by itself `del variable_name` does not optimize the code - however, 
there exist functions implemented in C (which I gave examples of) with special 
cases for when `sys.getrefcount(x) == 1`, which means they are free to 
repurpose an existing object.

> allowing the gc to free the memory if that variable was the last reference to 
> the object.

The gc may not be relevant here - in CPython, objects are cleaned up 
immediately as part of reference counting. The GC only kicks in for circular 
object graphs.

> In a for and a list comprehension, I suppose it's unneeded, since the
> variable points automatically to another memory location, so the
> reference is removed automatically.

The nth reference is not removed until the n+1th reference has been created.
This is unavoidable in a for loop without breaking existing code, but I think 
could (and should?) be changed in a list comprehension

> Furthermore, if you want to delete a temporary variable, you could do:
>
>     bc = b * c
>     a = bc + d
>     del bc

This doesn't hit the optimization I was talking about, because 
`ndarray.__add__(bc, d)` contains `if sys.getrefcount(self) == 1`, but here the 
local variable results in a second refcount.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/GPQPNUJLRKD32734WQMX5ZIHEZVTOLH2/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to