python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。

总结一下对象会在一下情况下引用计数加1:

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)。

在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

千万不要错过这几道Python面试题,Python面试题No16

第1题: python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性, ...

Python面试题之Python面试题汇总

在这篇文章中: Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Py ...

python面试题之Python支持什么数据类型?

所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http://www.pythonheidong.com/blog/article/67/ 来源:python黑洞网,专注py ...

Python 源码剖析(六)【内存管理机制】

六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...

python面试题三:Python 网络编程与并发

1 简述 OSI 七层协议. OSI七层协议模型主要是: 应用层(Application):为用户的应用程序(例如电子邮件.文件传输和终端仿真)提供网络服务. 表示层(Presentation):使用 ...

Python面试题之python是一种什么语言及优缺点

1.说说python是一种什么语言? 参考答案:python是一门动态解释性的强类型定义语言 编译型vs解释型 编译型优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译 ...

python面试题之python下多线程的限制

python多线程有个全局解释器锁(global interpreter lock). 这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不 ...

Python面试题之Python中的类和实例

0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...

Python面试题之Python反射详解

0x00 前言 反射,可以理解为利用字符串的形式去对象中操作成员属性和方法 反射的这点特性让我联想到了exec函数,也是把利用字符串的形式去让Python解释器去执行命令 Python Version ...

随机推荐

python logging模块详解[转]

一.简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.war ...

Oracle11g的delayed failed logins特性引起的性能问题

用户反映修改密码后程序明显变慢,查看AWR发现: ASH信息如下: 进一步验证: SQL>select event,p1 from v$session t where t.username is ...

vs2010把项目资源打包成系统资源

把wav格式的音频做成系统资源,根据条件播放相应的音频  System.Media.SoundPlayer spOne = new System.Media.SoundPlayer();      ...

自定义View(5)Paint常用的一些绘制滤镜,特效等介绍

Shader 返回绘图过程中重复色块的基类 相关方法:Paint::setShader(Shader shader) BitmapShader 从位图加载重复色块 LinearGradient, Ra ...

centos6 x86 安装 oracle 11g2r 日志

一.安装centos 6.5 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八. ...

xxx金融后台管理系统详细版:包括本地开发调试详细步骤

效果演示地址, github地址: demo演示:         1.About 此项目是 vue2.0 + element-ui + node+mongodb 构建的后台管理系统,所有的数据都是从 ...

CentOS7 安装Python

CentOS7 安装Python 1. 前置条件 centos7 安装时 勾选Development Tools,如果你centos7没有选,需要更多必要库 必要库 # yum -y install ...

C#超简单自定义事件

我知道你为啥点进来,所以不要犹豫了,立刻马上果断创建控制台项目,直接复制下面精干短小而又强大的代码运行: using System; using System.Collections.Generic; ...

python 如何进行内存管理,python面试题之Python是如何进行内存管理的相关推荐

  1. 2021年烟花爆竹生产单位安全生产管理人员免费试题及烟花爆竹生产单位安全生产管理人员考试总结

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:施工升降机安装拆卸工(建筑特殊工种)考试根据新施工升降机安装拆卸工(建筑特殊工种)考试大纲要求,安全生产模拟考试一点通将施工升降机 ...

  2. python面试题之Python是如何进行内存管理的

    python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收. ...

  3. python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...

    17.0 序 内存管理,对于python这样的动态语言是至关重要的一部分,它在很大程度上决定了python的执行效率,因为在python的运行中会创建和销毁大量的对象,这些都设计内存的管理.同理pyt ...

  4. python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式

    匿名用户 1级 2018-05-20 回答 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++, ...

  5. python释放变量内存_python解释器安装,运行python程序的方式及程序运行的步骤,变量与自动的内存管理...

    一.python解释器安装 ps: 注意设置环境变量(文件是操作系统的概念,操作系统优先在当前文件夹找,找不到就到环境变量path找) python解释器不兼容 解释器下载官网:http://pyth ...

  6. python是基于什么的内存管理方式_为什么说Python采用的是基于值的内存管理模式...

    内存管理架构: 1.python的内存管理机制由两部分组成,其由PYMALLOC_DEBUG控制,在debug模式下的内存管理机制和正常模式下的内存管理模式. 2.python的内存管理机制可以抽象成 ...

  7. python基于值的自动内存管理方式_为什么说Python采用的是基于值的内存管理模式...

    展开全部 内存管理架构: 1.python的内存管理机制由两部分组成,其由PYMALLOC_DEBUG控制,在debug模式下的内存管理机制和正常模32313133353236313431303231 ...

  8. python os 检查同名_2020Python 爬虫面试题,高薪就业Python面试必看

    先来一份完整的Python爬虫工程师关于Python面试的考点: 搞定这套 Python 爬虫面试题,Python面试 so easy 一. Python 基本功 1.简述Python 的特点和优点 ...

  9. python中常见的15中面试题

    下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块.每一个问题都可以扩充为一个教程,如果可能的话.某些问题甚至会涉及多个领域. 我之前还没有出过和这些题 ...

最新文章

  1. 面试官:为什么在系统中不推荐双写?
  2. linux 查看libusb版本,linux – 从使用libusb的设备读取问题
  3. 分布式锁的三种实现方式_分布式锁的多种实现方式
  4. 【HDU - 1698】 Just a Hook(线段树模板 区间覆盖更新(laz标记) + 区间和查询 )
  5. “先加密后签名”是不是安全?看完这篇就秒懂!
  6. pytorch ner
  7. 取rtsp流数据_SDP在RTSP、国标GB28181、WebRTC中的实践
  8. 【python】Tkinter可视化窗口(三)
  9. failed to execute ‘dot‘, make sure the Graphviz executables are on your systems‘ PATH
  10. ad系统安装配置指南(java-jndi-ldap),AD系统安装配置指南(JAVA-JNDI-LDAP-Exchange)
  11. 软件开发过程中需要的文档汇总
  12. Go (Golang) 语言-快速开始
  13. IDEA设置版权信息
  14. SumatraPDF添加保存标注到TXT文本的功能
  15. PC USB Warning
  16. 【css】fa图标变细
  17. AI大语音(八)——GMM-HMM声学模型(深度解析)
  18. [BUUCTF]PWN——judgement_mna_2016(32位fmt)
  19. 男人,女人一生要过五个关卡【曾仕强】
  20. 三键调光调色带定时遥控台灯方案-DLT8T10S-杰力科创

热门文章

  1. EOS5 之 内存溢出问题的解决
  2. 干货 | 数字万用表四种妙用方法,你知道么?
  3. “物联世界,共创未来”2017世界物联网博览会在无锡启幕
  4. linux php环境搭建
  5. 卷积核实现的不同效果及其原理
  6. Python Anaconda powerShell activate激活环境无效
  7. M14-MongoDB索引原理及使用
  8. 计算机视觉领域一些牛人的博客,研究机构网站链接
  9. 课程设计是计算机科学与技术专业的一门,信息系:对“计算机科学与技术”专业课程设计的改善建议(已回复).doc...
  10. [Google GTS][7.0R2]GtsSettingsTestCases(顺道以该case为例介绍GTS BL机制)