我可以发布一个导入的包来节省python中的内存吗?

我可以发布一个导入的包来节省python中的内存吗?,python,python-import,python-internals,Python,Python Import,Python Internals,我在python程序中导入了一些包。但其中很多只在程序过程开始时调用。这些包是否保存在内存中,直到整个程序运行完毕?在调用它们释放内存后,我可以删除它们吗?我认为这是不可能的,但即使是这样,通过擦除加载的模块获得的内存通常也是最小的 在某个文件的代码中运行del module,将不会将其从内存中删除:所有加载的模块都可以从全局sys.modules字典中获得。如果从sys.modules中删除模块,可以获得一些空间,但我认为Python仍然会保留对模块中定义的类的引用(即使代码中没有这些类的实例

我在python程序中导入了一些包。但其中很多只在程序过程开始时调用。这些包是否保存在内存中,直到整个程序运行完毕?在调用它们释放内存后,我可以删除它们吗?

我认为这是不可能的,但即使是这样,通过擦除加载的模块获得的内存通常也是最小的

在某个文件的代码中运行
del module
,将不会将其从内存中删除:所有加载的模块都可以从全局
sys.modules
字典中获得。如果从sys.modules中删除模块,可以获得一些空间,但我认为Python仍然会保留对模块中定义的类的引用(即使代码中没有这些类的实例或其他引用)

总而言之,大多数模块都会返回几千字节。如果您计划“卸载”内存中有多兆字节影响的模块(想想Pandas/matplotlib/sqlalchemy),那么成功的可能性就更小了,因为这些代码库的复杂性意味着它们有很多内部交叉引用,您需要删除它们从sys.modules内部导入的所有内容


如果设置基于这样的多兆字节框架,并且您运行在非常有限的系统上(例如,raspberry class mini PC,只有几MB),您可以尝试在子进程中执行初始化,并在完成后终止该进程-这将为您释放内存提供一些保证。但是,除了有限的硬件之外,你不应该为它操心。

你试过
del
吗?正如@IgorRivin所说,使用类似
del-np
@DerekEden的东西,
del-np
不会节省任何内存。这只会去掉一个名称-模块仍然被
sys.modules
引用,也可能被其他模块名称空间中的引用引用引用。看到CPython的内存管理,您应该会想到,即使清除对模块的所有引用,也不会将内存返回操作系统。