AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

Learning Python 017 — Python2 和 Python3 的内存释放


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python 2.7.10 和 python 3.5.0

学习Python的内存释放知识点的动机

之前我学过很多Python的程序,偶然的一次,我打开任务管理器,看到我写的程序,运行时占用了大量的内存,所以,我希望学会如何释放内存,来优化我的程序,也不给电脑照成太大的负担,所以,我想学会:Python的内存释放这个知识点。


参考网站: gc模块–Python内存释放

下面写几个实验程序,里面都是使用range() 函数来分配内存空间的。range()函数的详细介绍,请见这篇博客:range()函数在python2 和 python3中的使用介绍

Python2 内存释放

未优化前的代码:

1
2
3
a = range(1000*10000)
while True:
  pass

Alt text


优化内存的代码:

使用手动释放内存的方法来优化内存。

1
2
3
4
5
6
import gc
a = range(1000*10000)
del a
gc.collect()
while True:
  pass

可以看出,占用的内存空间明显减小了。

Alt text


既优化了内存,也优化了CPU 的代码

使用睡眠来优化CPU运行。

1
2
3
4
5
6
7
8
9
import gc
import time

a = range(1000*10000)
del a
gc.collect()
while True:
  time.sleep(1.0)
  pass

Alt text


Python3 内存释放

未优化前的代码:

1
2
3
a = range(1000*10000)
while True:
  pass

使用Python3库运行未优化的代码,所需要的消耗的内存空间和使用Python2运行优化内存的代码消耗的内存空间 差不多。

Alt text


优化内存的代码:

1
2
3
4
5
6
import gc
a = range(1000*10000)
del a
gc.collect()
while True:
  pass

可以看出,所暂用的内存空间没有任何增减。

Alt text


既优化了内存,也优化了CPU 的代码:

1
2
3
4
5
6
7
8
9
import gc
import time

a = range(1000*10000)
del a
gc.collect()
while True:
  time.sleep(1.0)
  pass

Alt text


总结

Python3 真的是比 Python2 更加的完善了,从这一点上也可以看出来,Python语言是第4代语言里面非常杰出的语言。随着它的不断发展,它会运行速度慢和内存消耗大的缺点会慢慢的消失(因为:许多Python内置库是用C语言写的)。我看好Python。

Comments