I am using Python (Canopy) extensively for Earth science application. Because my application is memory consuming, I am trying find way to erase variable that I don't need any more in my programs, I tried to use del command to erase the variable memory, but I found that space used by Canopy is still the same. Any ideas about how to erase variable completely from the memory. thanks
2 Answers
You can't manually nuke an object from your memory in Python!
The Python Garbage Collector (GC) will automatically free up memory of objects that have no existing references any more (implementation details differ per interpreter). It's periodically checking for abandoned objects in background without your interaction.
So to get an object recycled, you have to eliminate all references to it by assigning a different value (e.g. None) to all variables that pointed to the object. You can also delete a variable name using the del statement, but as you already noticed, this only deletes the name with the reference, but not the object and its data itself. Only the GC can do that.
5 Comments
Now, it is possible to do it manually. To do that, you need to do it in two steps:
- use the command del to remove the variable from the workspace
- use the comand gc.collect to run the garbage collector and clear the ram memory
A code example:
import numpy as np
import gc
a = np.array([1,2,3])
del a
gc.collect()
More info: link
__import__("gc").collect().deldoes not delete objects, it removes references to them. Usesys.getrefcount()orweakrefsto see whether there's something that is keeping an object alive