Python del statement Python del statement python python

Python del statement


The del statement doesn't reclaim memory. It removes a reference, which decrements the reference count on the value. If the count is zero, the memory can be reclaimed. CPython will reclaim the memory immediately, there's no need to wait for the garbage collector to run.

In fact, the garbage collector is only needed for reclaiming cyclic structures.

As Waleed Khan says in his comment, Python memory management just works, you don't have to worry about it.


"Deletion of a name removes the binding of that name from the local or global namespace". No more, no less. It does nothing to the object the name pointed to, except decrementing its refcount, and if refcount is not zero, the object will not be collected even when GC runs.


Also, the del statement seems to be a little bit faster than assigning None (similar to Java's style assigning null to a variable to free its memory ...).

To compare:

import time, mathdef measure_del():        start = time.time()        for i in range(0,int(math.pow(10,8))):                    a = "123"                    del a # <--- !!!        end = time.time()        print(end-start)def measure_none():        start = time.time()        for i in range(0,int(math.pow(10,8))):                    a = "123"                    a = None # <--- !!!        end = time.time()        print(end-start)

results in (running in idle3.4):

>>> measure_del()3.9930295944213867>>> measure_del()3.7402305603027344>>> measure_del()3.8423104286193848>>> measure_del()3.753770351409912>>> measure_del()3.7772741317749023>>> measure_del()3.815058946609497>>> measure_none()4.052351236343384>>> measure_none()4.130320072174072>>> measure_none()4.082390069961548>>> measure_none()4.100180625915527>>> measure_none()4.071730375289917>>> measure_none()4.136169672012329