Python:导入模块的内存成本

Python:导入模块的内存成本,python,memory-efficient,Python,Memory Efficient,内存成本显然取决于模块的大小,但我只是想寻找一个一般性的答案:用Python导入模块通常是昂贵还是便宜?如果我有几十个小脚本,它们可能在整个应用程序期间都留在内存中,那么这会占用多少内存?听起来您并不担心时间成本(很好;这很愚蠢,因为模块只导入一次),而是担心内存成本。我想告诉大家:如果您需要这些模块中的所有功能,那么您计划如何避免将它们全部存储在内存中?不妨以最合乎逻辑的方式导入 也就是说,在Python中,import是一个语句,而不是某种预处理器指令(或类似指令),因此您可以延迟模块的导入

内存成本显然取决于模块的大小,但我只是想寻找一个一般性的答案:用Python导入模块通常是昂贵还是便宜?如果我有几十个小脚本,它们可能在整个应用程序期间都留在内存中,那么这会占用多少内存?

听起来您并不担心时间成本(很好;这很愚蠢,因为模块只导入一次),而是担心内存成本。我想告诉大家:如果您需要这些模块中的所有功能,那么您计划如何避免将它们全部存储在内存中?不妨以最合乎逻辑的方式导入


也就是说,在Python中,import是一个语句,而不是某种预处理器指令(或类似指令),因此您可以延迟模块的导入,直到实际需要其内容为止,只需安排语句在适当的时间运行即可。在一些特别大或复杂的项目中,这可能是一个有意义的优化,或者至少使棘手的事情成为可能。请记住,当您参考
foo.bar
时,Python编译器不会尝试检查是否存在
foo
;在运行时查找每个名称。鸭子打字在这里起作用;
foo.bar
代码并不关心
foo
是模块、类还是对象的名称。(这基本上是因为模块和类对象,但我离题了…

除非您在嵌入式平台或其他平台上,否则我不会担心它。为什么不试试看呢。大多数(所有?)操作系统都有办法查看进程使用了多少内存。@gnibbler当然可以,但它们通常不是很准确。现代操作系统中的内存管理涉及多个层面。但我同意这不太重要:)这基本上就是Bazaar DVCS所做的;您可能希望检查它的源代码及其“lazy\u import”机制。