Python中“导入”和“导入”场景的内存利用率是多少?

时间:2014-02-23 05:25:59

标签: python

我试图了解以下模块导入案例中的内存利用率: 让我们有一个名为myfile.py的模块包含

    //myfile.py
    var  = 'Hello World'

案例1:

    import myfile
    myfile.title

案例2:

    from my file import title
    title

谢谢!

2 个答案:

答案 0 :(得分:0)

它基本相同。在这两种情况下,无论您使用哪个部分,都需要加载整个myfile模块。这两个版本都不会创建不必要的副本,所以如果myfile.title是巨大的,那么这两个版本都不会用myfile.title的副本填满你的记忆。

答案 1 :(得分:0)

导入模块不会浪费任何东西;该模块始终完全导入(进入myfile.modules映射),因此无论您使用import myfile还是from myfile import title都不会产生任何赔率。

两个语句之间的唯一区别是名称绑定; import myfile将名称myfile绑定到模块(所以myfile -> myfile.modules['myfile']),而myfile import title绑定不同的名称,标题,直接指向模块内包含的属性(所以title -> myfile.modules['myfile'].title)。无论你是否使用模块中的任何其他内容,myfile模块的其余部分仍然存在。

这两种方法之间也没有性能差异。是的,myfile.title必须查找两件事;它必须在全局命名空间中查找myfile(找到模块),然后查找属性标题。是的,通过使用from myfile import title,您可以跳过属性查找,因为您已经直接引用了该属性。但是import语句仍然需要做这项工作,它在导入时查找相同的属性,并且你只需要使用一次标题。如果你必须在一个循环中使用数千次标题,它可能会有所作为,但在这种特定情况下它确实没有。

之间的选择应该基于编码风格。

在大型模块中,我当然会使用import myfile;代码文档很重要,并且在一个大模块中的某个地方使用myfile.title会使你所指的内容更清晰,而不仅仅是标题。

如果您使用标题的唯一地点位于“”块中以调用main()函数,请务必使用from myfile import title,如果您对此感到满意:

if __name__ == '__main__':
    from myfile import title
    main(title)

我自己仍在使用import myfile。所有事情都是平等的(确切地说,就性能和用于编写它的字符数而言),这对我来说更容易。

如果您要完全导入其他内容,那么也许性能会发挥作用。但是,只有在模块中多次使用特定名称时,例如在关键循环中。但是,然后创建一个本地名称(在一个函数内)将会更快:

import myfile

def title():
    localname = somemodule.somefunctionorother
    while test:
        # huge, critical loop
        foo = localname(bar)