Python模块:导入时会占用内存吗?
我刚刚完成了这个关于在Python中创建和导入模块的初学者练习。
我在想,模块里的所有东西都会被导入到电脑的内存里吗?
随着代码变得越来越长,导入的模块也越来越多,这会对内存产生影响吗?
我需要了解内存管理才能写出更节省资源的代码吗?
3 个回答
是的,也不是。
是的,模块确实会被加载到电脑的内存里,但不意味着你需要为了这个去写节省资源的代码。Python的模块一般都很小(通常只有几千字节,极少数情况下可能有几兆字节),对内存的使用影响不大。
我能想到的唯一一种可能导致内存泄漏的情况就是滥用导入功能。你可以动态地创建并导入任意名称的模块(比如为了创建一个插件系统),用一次后就不再使用它们。如果你通过正常的导入方式来做这件事,比如使用 __import__(variable_module_name)
,这些模块会被添加到 sys.modules
中,即使之后不再使用它们。
解决办法就是,不要这样做。如果你真的在创建一个插件系统,那么这种动态导入可能是可以的,因为这些插件会被重复使用。如果你确实需要使用动态生成的、一次性的代码,可以使用 eval
。
如果你真的非常需要在动态生成的代码上使用导入(比如为了自动化测试),那么你可能需要在 sys.modules
中查找并删除你导入的模块。这里有一篇不错的文章,解释了如何做到这一点。
你的模块会自动被编译成一些小文件(.pyc文件),然后这些文件会被加载到内存中。不过你不用担心会占用太多内存,因为模块非常小;通常情况下,一次可以加载上千个模块!
你不需要了解内存管理,因为Python会为你处理好这些事情。
补充:你还可以在每个模块里写很多代码和模块的说明文档(而且你应该这么做,可以看看文档字符串的相关内容),这样在加载模块时并不会增加模块的大小或加载速度,因为编译的时候会把所有不必要的文字、注释等都去掉。