老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Python语言是如何进行内存管理的?老男孩python培训班

老男孩IT教育

常见问题

2022年3月2日 14:15

Python作为一个编译型、互动型和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先声明,变量无需指定类型,程序员无需关心内存管理,Python解释器会自动回收,那你知道Python语言是如何进行内存管理的吗?请看下文:

       Python作为一个编译型、互动型和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先声明,变量无需指定类型,程序员无需关心内存管理,Python解释器会自动回收,那你知道Python语言是如何进行内存管理的吗?请看下文:

python培训机构

       Python的内存管理,一般从以下三个方面来说:

       1)对象的引用计数机制(四增五减)

       2)垃圾回收机制(手动自动,分代回收)

       3)内存池机制(大m小p)

       1)对象的引用计数机制

       要保持追踪内存中的对象,Python使用了引用计数这一简单的技术。sys.getrefcount(a)可以查看a对象的引用计数,但是比正常计数大1,因为调用函数的时候传入a,这会让a的引用计数+1

       2)垃圾回收机制

       吃太多,总会变胖,Python也是这样。当Python中的对象越来越多,它们将占据越来越大的内存。不过你不用太担心Python的体形,它会在适当的时候“减肥”,启动垃圾回收(garbage collection),将没用的对象清除

       从基本原理上,当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了

       比如某个新建对象,它被分配给某个引用,对象的引用计数变为1。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收。

       然而,减肥是个昂贵而费力的事情。垃圾回收时,Python不能进行其它的任务。频繁的垃圾回收将大大降低Python的工作效率。如果内存中的对象不多,就没有必要总启动垃圾回收。

       所以,Python只会在特定条件下,自动启动垃圾回收。当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。

       我们可以通过gc模块的get_threshold()方法,查看该阈值。

       3)内存池机制

       Python中有分为大内存和小内存:(256K为界限分大小内存)

       1、大内存使用malloc进行分配

       2、小内存使用内存池进行分配

       python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256K时,pymalloc会在内存池中申请内存空间;当大于256K时,则会直接执行系统的malloc的行为来申请内存空间。

       关于"Python语言是如何进行内存管理的?"的话题到这里就结束了,老男孩教育是Python培训领域的专家,2012年就开展了Python培训,积累了大量的Python培训教学经验,并能全局把控企业用人指标,科学的制定Python教学课程体系,满足5-8年职业生涯需求,让学员轻松拿下高薪职位!

  推荐阅读:

       盘点6种Python中函数的参数类型!老男孩python培训班

       该如何优化SQL语句以提升速度?老男孩Python课程

       Python中下划线的6个作用!老男孩Python线下面授班

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。