python的内存管理机制三个方面:

1、引用计数

2、垃圾回收

3、内存池机制

一、引用计数

我们首先创建了一个对象3.14, 然后将这个浮点数对象的引用赋值给x,因为x是第一个引用,因此,这个浮点数对象的引用计数为1. 语句y = x创建了一个指向同一个对象的引用别名y,我们发现,并没有为Y创建一个新的对象,而是将Y也指向了x指向的浮点数对象,使其引用计数为2.

我们可以很容易就证明上述的观点:

引用计数增加

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.对象从一个窗口对象中移除:myList.remove(x)

5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。

二、垃圾回收

1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。

2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。

三、内存池机制

ython又分为大内存和小内存。大小以256字节为界限,对于大内存使用Malloc进行分配,而对于小内存则使用内存池进行分配。

Python的内存池又分为4个层次:Block、Pool、Arean、usedpool,如下图所示

其中block是最小的内存单元,大小为8的整数倍。如果想申请27B的内存,会分配一个32B的block,其中申请size和size_index之间的关系有对应,见下图

python的内存管理机制相关推荐

  1. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  2. python的内存管理机制及调优手段_Python的内存管理机制及调优手段?

    转载自 http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理机 ...

  3. 【Python基础】什么是Python的 “内存管理机制”

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  4. python的内存管理机制及调优手段_Python的内存管理机制及调优手段

    内存管理机制:引用计数.垃圾回收.内存池 引用计数: 引用计数是一种非常高效的内存管理手段,当一个Python对象引用时其引用计数加一,当其不再被一个变量引用时则减一.当引用计数等于0时对象被删除. ...

  5. 【python教程入门学习】Python的内存管理机制

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  6. 什么是Python的 “内存管理机制”

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  7. python的内存管理机制及调优手段(很详细的哦)

    内存管理机制:引用计数.垃圾回收.内存池 引用计数 引用计数是一种非常高效的内存管理手段, 当一个Python对象被引 用时其引用计数增加1, 当其不再被一个变量引用时则计数减1. 当引用计数等于0时 ...

  8. 深度解析Python的内存管理机制:垃圾回收机制

    Python程序在运行时,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量,计算完成后,再将结果输出到永久性存储器中.但是当数据量过大,或者内存空间管理不善,就很容易出现内存溢出的情况,程序可 ...

  9. 什么是python语言的动态类型机制_python的内存管理机制

    一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...

最新文章

  1. 毒霸能清除的大小流氓清单(部分)
  2. express 使用 redirect 对 ajax 无效 页面不跳转
  3. BZOJ 1878 HH的项链
  4. Spring框架中的设计模式(三)
  5. 线程安全、守护线程、join()
  6. 盘点3个改变世界的AI项目,NLP/CV/BI,3个方向
  7. mysql 查看个人版,MySQL系列-权限管理
  8. ic读卡器设置工具_什么读卡器,是一用过就想揣身上不想丢的?
  9. 文件--非连续空间存放方式
  10. matlab如何用二分法求函数零点,用二分法求函数的零点及二分法定义
  11. Max函数、Min函数
  12. Bug:数据库的有数据,但是查出来是0
  13. http1,http2,http3
  14. 【期末复习】带着问题看网络信息安全
  15. k8s控制器——Replicaset和Deployment
  16. 机械制造与自动化类毕业论文文献有哪些?
  17. DAS\NAS\SAN\IPSAN区别
  18. bootstrapt 表格自适应_BootStrap table表格插件自适应固定表头(超好用)
  19. java基础--while循环实现存钱问题案例
  20. 9306 mysql41_S9306开启web功能!

热门文章

  1. 计算机网络mooc测验2
  2. 去掉/隐藏Firefox标题栏
  3. 这段时间用Vue做 淘宝管理系统遇到的几个问题
  4. navigateTo:fail page pages/main/detail/detail?id=9713863 is not found
  5. [C语言]计算sin值填空 :阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。然后上机运行程序。利用公式,计算sin x(x为弧度值)的值,直到最后一项的绝对值小于。。。
  6. 微信公众号获取openid(vue)
  7. 计算机无法用u盘重装系统,电脑开不了机怎么办教你用u盘安装系统
  8. java如何使用线程锁的_Java线程知识:二、锁的简单使用
  9. php入门之奇偶数判断
  10. 洛谷 - P1199 三国游戏 (博弈论)