我一直在内置模块中存储变量信息,我想清除存储在其中的所有变量信息。我无法弄清楚如何做到这一点。
import importlib
import builtins
print("add" in dir(builtins))
builtins.add = "x"
print("add" in dir(builtins))
importlib.reload(builtins)
print("add" in dir(builtins))
这似乎不起作用。
答案 0 :(得分:1)
reload
在重新加载模块之前不会清除模块的__dict__
,因此重新加载模块不会影响您添加到模块中的任何名称,而这些名称最初不是模块的一部分。
最好避免弄乱builtins
模块,而不是在弄乱它之后尝试恢复它。也就是说,如果您真的想要这样做,请先保存builtins.__dict__
的副本,然后再将其搞砸,以便以后可以从备份中恢复:
# Before screwing with builtins:
builtins_backup = builtins.__dict__.copy()
# After screwing with builtins:
builtins.__dict__.clear()
builtins.__dict__.update(builtins_backup)
如果clear
和update
之间有另一个线程,那就不会线程安全,但无论如何,尝试重新加载builtins
几乎都不在安全的范围内。