我刚刚为初学者完成了这个关于在 python 中创建和导入模块的练习。
我想知道模块中的所有内容是否都导入到计算机的内存中?
随着代码变长和导入的模块越来越多,以后是否会对内存产生影响?
因此,我是否需要了解内存管理才能编写资源高效的代码?
我刚刚为初学者完成了这个关于在 python 中创建和导入模块的练习。
我想知道模块中的所有内容是否都导入到计算机的内存中?
随着代码变长和导入的模块越来越多,以后是否会对内存产生影响?
因此,我是否需要了解内存管理才能编写资源高效的代码?
您的模块会自动编译(.pyc 文件),然后将其导入内存,但您不必担心内存不足:模块非常小;一次加载数千个模块是很常见的!
您不需要了解内存管理,因为 Python 会为您完成所有工作。
编辑:您还可以在每个模块本身中编写大量代码和模块的文档(并且您应该在此处阅读有关文档字符串),而不会在加载时增加模块的大小或速度,因为编译步骤会消除所有不必要的文字、评论等
我只能想象一种可能滥用导入来泄漏内存的方式;您可以动态创建和导入任意名称的模块(例如,为了创建插件系统);使用它们一次并停止使用它们。如果您通过正常的导入机制来执行此操作,即使用__import__(variable_module_name)
,这些模块将被添加到sys.modules
并且即使它们不会被进一步使用。
解决方法很好,不要那样做。如果你真的在创建一个插件系统,那么这种动态导入可能没问题,因为插件会被重用。如果您确实需要使用动态生成的单次使用代码;使用eval
.
如果您真的非常需要在动态生成的代码上使用导入(例如,用于自动化测试),那么您可能确实需要四处sys.modules
寻找以擦除您导入的模块。 这是一篇很好的文章,解释了如何做这样的事情。
是和不是。
是的,模块确实被导入到计算机内存中,但是不,您不应该因此而编写资源高效的代码。Python 模块非常小(几 KiB,在极少数情况下几 MiB),对内存使用没有显着影响。