Python中主要通过引用计数和内存池机制进行内存管理。下面,小千详细来说说这两种方法。

  一、引用计数机制

  Python内部使用引用计数(记录对象有多少个引用)来保持追踪内存中的对象,当对象被创建时,该对象的引用计数加1;当对象被销毁时,该对象的引用计数变为0,它会被当做垃圾进行回收。

  引用计数增加的情况:

  (1)对象被创建,如x=4。

  (2)赋值给其它变量,如y=x。

  (3)被作为参数传递给函数,如foo(x)。

  (4)作为容器对象的一个元素,如a=[1,x,'33']。

  引用计数减少的情况:

  (1)对象的引用离开它的作用域,比如, foo(x)函数执行结束时,x引用的对象引用计数减1。

  (2)对象的引用被显式地销毁,如del x或del y。

  (3)对象的别名被赋值给其他对象,x=789。

  (4)对象从窗口对象中被移除,a.remove(x)。

  垃圾回收:

  (1)垃圾收集器会回收引用计数为0的对象,并清除这些对象占用的内存空间。

  (2)当两个对象相互引用时,若它们没有被其它引用所持有,则会被垃圾收集器回收。

  (3)垃圾回收机制还有一个循环垃圾回收器,它可以确保释放循环引用对象(a引用b, b引用a)。

  二、内存池机制

  在Python中,很多时候申请的内存都是小块内存,这些小块内存在申请不久后又会被释放,这就意味着程序在运行期间会大量地执行申请和释放操作,影响Python的执行效率。为了加快Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

  Python中所有小于256个字节的对象都使用内存池的分配器。另外,一些Python对象,如整数、浮点数或列表,都拥有独立的内存池,对象之间不会共享这些独立的内存池。也就是说,若分配又释放了大量的整数,用于缓存这些整数的内存池将不再分配给浮点数。

本文来自千锋教育,转载请注明出处。

©著作权归作者所有:来自51CTO博客作者戏精程序媛的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Ulysses 22 发布功能加强,允许自定义分组颜色
  2. 软测经典面试题(二)
  3. 如何避免ajax重复请求?
  4. 基于机器阅读理解(MRC)的信息抽取方法
  5. 深度学习技术在美图个性化推荐的应用实践
  6. 视频 | 搜索引擎中的 web 数据挖掘
  7. 推荐系统中模型训练及使用流程的标准化
  8. 爱奇艺效果广告的个性化探索与实践
  9. 实时计算引擎在贝壳的应用与实践

随机推荐

  1. 绑定和解除相同javascript函数的目的是什
  2. jquery不会对select/选项更改事件作出反
  3. jquery ajax和php实现返回值 json类型
  4. 使用jquery post发布PHP文件
  5. 如何使用jQuery增加字体大小的变化?
  6. 将CSS样式转换成JS变量?
  7. JQuery 的选取元素 和 方法
  8. 使用json将发送请求发送到RESTful WCF
  9. 求ext动态树(asp.net+jquery+ajax+sql2008
  10. JQuery UI自动完成(1.8)滚动