python-将代码包装在函数中是否可以获得内存效率?

我一直在写一些代码.我通常的方法是首先解决问题的所有部分,在解决问题时创建所需的循环和其他代码,然后,如果我希望重用这些代码,请回头对它进行分组.我认为应该将代码分组以创建函数.我刚刚注意到,创建函数并调用它...

我一直在写一些代码.我通常的方法是首先解决问题的所有部分,在解决问题时创建所需的循环和其他代码,然后,如果我希望重用这些代码,请回头对它进行分组.我认为应该将代码分组以创建函数.

我刚刚注意到,创建函数并调用它们似乎比编写完代码行和删除容器要高效得多.

例如:

def someFunction(aList):
    do things to aList
    that create a dictionary
    return aDict

似乎最终释放的内存比

>>do things to alist
>>that create a dictionary
>>del(aList)

这是预期的行为吗?

编辑添加示例代码

当此功能完成运行时,PF使用率显示增加了约100 mb,filesList包含约800万行.

def getAllCIKS(filingList):
    cikDICT=defaultdict(int)
    for filing in filingList:
        if filing.startswith('.'):
            del(filing)
            continue
        cik=filing.split('^')[0].strip()
        cikDICT[cik]+=1
        del(filing)
    ciklist=cikDICT.keys()
    ciklist.sort()
return ciklist

allCIKS=getAllCIKS(open(r'c:\filinglist.txt').readlines())

如果我运行它,则显示增加了近400 mb

cikDICT=defaultdict(int)
for filing in open(r'c:\filinglist.txt').readlines():
    if filing.startswith('.'):
        del(filing)
        continue
    cik=filing.split('^')[0].strip()
    cikDICT[cik]+=1
    del(filing)

ciklist=cikDICT.keys()
ciklist.sort()
del(cikDICT)

编辑
我今天已经在玩这个游戏了.由于我的重点一直放在PF用法上,因此我的观察和问题应该有所改善.不幸的是,我只能在其他任务之间对此this一oke.但是我开始怀疑引用与副本.如果我从列表创建字典,则字典容器是否保存来自列表的值的副本,或者它们是否包含对列表中值的引用?我敢打赌,这些值将被复制而不是被引用.

我注意到的另一件事是,GC列表中的项目是来自已删除容器的项目.那有意义吗?我有一个列表,并假设列表中的每个项目都是[(aTuple),anInteger,[another list]].当我开始学习如何操作gc对象并检查它们时,即使列表已被强制删除并且即使我通过了0,1&,我仍在gc中找到了这些对象.我不记得尝试删除它们的方法的2值.

我感谢人们分享的见解.不幸的是,我一直对弄清楚引擎盖是如何工作感兴趣.

解决方法:

也许您在函数中使用了一些局部变量,这些局部变量在函数末尾通过引用计数隐式释放,而在代码段末尾没有释放?

本文标题为:python-将代码包装在函数中是否可以获得内存效率?

基础教程推荐