I've been searching for the accurate answer to this question for a couple of days now but haven't got anything good. I'm not a complete beginner in programming, but not yet even on the intermediate level.
When I'm in the shell of Python, I type: dir()
and I can see all the names of all the objects in the current scope (main block), there are 6 of them:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
Then, when I'm declaring a variable, for example x = 10
, it automatically adds to that lists of objects under built-in module dir()
, and when I type dir()
again, it shows now:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
The same goes for functions, classes and so on.
How do I delete all those new objects without erasing the standard 6 which where available at the beginning?
I've read here about "memory cleaning", "cleaning of the console", which erases all the text from the command prompt window:
>>> import sys
>>> clear = lambda: os.system('cls')
>>> clear()
But all this has nothing to do with what I'm trying to achieve, it doesn't clean out all used objects.
You can delete individual names with del
:
del x
or you can remove them from the globals()
object:
for name in dir():
if not name.startswith('_'):
del globals()[name]
This is just an example loop; it defensively only deletes names that do not start with an underscore, making a (not unreasoned) assumption that you only used names without an underscore at the start in your interpreter. You could use a hard-coded list of names to keep instead (whitelisting) if you really wanted to be thorough. There is no built-in function to do the clearing for you, other than just exit and restart the interpreter.
Modules you've imported (import os
) are going to remain imported because they are referenced by sys.modules
; subsequent imports will reuse the already imported module object. You just won't have a reference to them in your current global namespace.