10

我刚刚为初学者完成了这个关于在 python 中创建和导入模块的练习。

我想知道模块中的所有内容是否都导入到计算机的内存中?

随着代码变长和导入的模块越来越多,以后是否会对内存产生影响?

因此,我是否需要了解内存管理才能编写资源高效的代码?

4

3 回答 3

9

您的模块会自动编译(.pyc 文件),然后将其导入内存,但您不必担心内存不足:模块非常小;一次加载数千个模块是很常见的!

您不需要了解内存管理,因为 Python 会为您完成所有工作。

编辑:您还可以在每个模块本身中编写大量代码和模块的文档(并且您应该在此处阅读有关文档字符串),而不会在加载时增加模块的大小或速度,因为编译步骤会消除所有不必要的文字、评论等

于 2011-09-10T16:24:42.570 回答
3

我只能想象一种可能滥用导入来泄漏内存的方式;您可以动态创建和导入任意名称的模块(例如,为了创建插件系统);使用它们一次并停止使用它们。如果您通过正常的导入机制来执行此操作,即使用__import__(variable_module_name),这些模块将被添加到sys.modules并且即使它们不会被进一步使用。

解决方法很好,不要那样做。如果你真的在创建一个插件系统,那么这种动态导入可能没问题,因为插件会被重用。如果您确实需要使用动态生成的单次使用代码;使用eval.

如果您真的非常需要在动态生成的代码上使用导入(例如,用于自动化测试),那么您可能确实需要四处sys.modules寻找以擦除您导入的模块。 这是一篇很好的文章,解释了如何做这样的事情。

于 2011-09-10T16:56:01.210 回答
0

是和不是。

是的,模块确实被导入到计算机内存中,但是不,您不应该因此而编写资源高效的代码。Python 模块非常小(几 KiB,在极少数情况下几 MiB),对内存使用没有显着影响。

于 2011-09-10T16:25:10.567 回答