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

我一直在写一些代码.我通常的方法是首先解决问题的所有部分,在解决问题时创建所需的循环和其他代码,然后,如果我希望重用这些代码,请回头对它进行分组.我认为应该将代码分组以创建函数.
我刚刚注意到,创建函数并调用它们似乎比编写完代码行和删除容器要高效得多.
例如:
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-将代码包装在函数中是否可以获得内存效率?


基础教程推荐
- Day033--Python--进程 2023-09-03
- windows python2下停止,清空,启动tomcat 2023-09-03
- python通过pillow识别动态验证码的示例代码 2023-08-08
- python 读shell 2023-09-04
- Python进程/线程/协程 2023-09-04
- linux@ubuntu工具Eclipse配置python的pydev开发环境 2023-09-03
- 基于Python实现电影售票系统 2023-08-11
- Python OpenCV特征检测之特征匹配方式详解 2023-08-08
- 用python画了个圣诞树给女朋友 2023-08-04
- windows安装python2.7.12和pycharm2018教程 2023-09-03