Bo *_* Yi 7 python python-import python-internals
我在 python 程序中导入了一些包。但其中很多只在程序开始时被调用。这些包是否保存在内存中直到整个程序运行完毕?调用释放内存后我可以删除它们吗?
我认为这是不可能的 - 但即使是这样,通过擦除加载的模块获得的内存通常也是最小的。
del module在某些文件的代码中运行不会将其从内存中删除:所有加载的模块都可以从全局 sys.modules字典中获取。如果你从 sys.modules 中删除模块,你可以获得一些空间,但我认为 Python 仍然会至少保留对模块中定义的类的引用(即使你没有这些类的实例或其他引用)代码中的类。)
总而言之,大多数模块都会为您节省几千字节的内存。如果您计划“卸载”对内存有数兆字节影响的模块(例如 Pandas/matplotlib/sqlalchemy),那么您成功的可能性就更小,因为这些代码库的复杂性意味着它们有很多内部交叉引用,并且您需要删除它们从 sys.modules 内部导入的所有内容。
如果设置基于像这样的多兆字节框架,并且您正在非常有限的系统上运行(例如,树莓级迷你 PC,只有几 MB),您可以尝试在子进程中执行初始化,并且完成后杀死该进程 - 这会给你一些保证内存被释放。但除了有限的硬件之外,您根本不应该担心它。