python内存机制

1、对象在内存的存储

1 )、数字存储

a = 100
b = 100

以上代码是一个简单的赋值语句,将常量100赋值给变量a、b。在python内存机制中,100称为一个对象,而a、b为对象的引用。如何知道该赋值语句是否创建了2个对象,这时可以使用python内置函数id()和关键字is。id()用于返回对象的内存地址,is用于判断两个引用所指的对象是否相同。

print(id(a))  # 返回对象的内存地址
print(id(b))
print(a is b)
# 输出:# 1512471104
# 1512471104
# True# Process finished with exit code 0

返回到控制台的数据说明:a、b的内存地址是一样的,所以a、b引用指向的是同一个对象。

2)、简短的字符串存储

a = "Hello world"
b = "Hello world"
print(id(a))
print(id(b))
print(a is b)# 结果:
# 1388045640112
# 1388045640112
# True# Process finished with exit code 0

可见,python存储简短的字符串与整数类型存储一致的,创建一个字符串对象”Hello world”,a、b是两个引用,引用的是同一个对象。

3)、列表/字典存储

a = []
b = []
print(id(a))
print(id(b))
print(a is b)
# 结果:
# 2906693242632
# 2906692073992
# False# Process finished with exit code 0
a = dict(name='八岐大蛇',age=1000,sex='男',addr='东方',enemy=['八神', '草薙京', '神乐千鹤'])
b = dict(name='八岐大蛇',age=1000,sex='男',addr='东方',enemy=['八神', '草薙京', '神乐千鹤'])
print(id(a))
print(id(b))
print(a is b)
# 结果:
# 2906693242632
# 2906692073992
# False# Process finished with exit code 0

列表和字典对象在内存中会创建两个不同的对象,这个时候引用a和b引用各自的对象。
结合简短的字符串、数字存储的运行结果。可以看到,Python缓存了整数和短字符串,因此每个对象只存有一份,使用赋值语句,也只是创造了新的引用,而不是对象本身。列表和字典对象可以有多个相同的对象,可以使用赋值语句创建出新的对象。

2、减少引用

减少某个对象的引用计数可以使用pop()删除。getrefcount()可以查看某个对象的引用计数。
注意:当使用某个引用作为参数,传递给getrefcount()时,会创建了一个临时的引用。所以,getrefcount()所得到的结果,会比正常的多1个。

from sys import getrefcounta = [100, 200]
b = [a, a, a, a, a, a]
print(getrefcount(a))
b.pop()
print(getrefcount(a))# 结果:
# 8
# 7# Process finished with exit code 0

3、垃圾回收

python引用的计数器会追踪创建了多少个新的对象和有多少对象的引用,随着对象越来越多,它们将占据越来越大的存储空间。当达到某个时候,内存开始进行垃圾回收,销毁引用计数器为0的对象,避免引用计数消耗更多的资源。

4、分代回收

分代回收:垃圾回收了很多次后,有些对象依然存在,那么这样的对象不需要经常回收,python会减少在垃圾回收中扫描它们的频率。
分代回收分为0、1、2三代,每10次0代垃圾回收,会配合1次1代的垃圾回收;而每10次1代的垃圾回收,才会有1次的2代垃圾回收。

python内存机制相关推荐

  1. python内存管理说法错误_python面试题总结1-内存管理机制

    1.python内存管理机制 (1).引用计数 (2). 垃圾回收 (3). 内存池机制 引用计数 在python中每创建一个对象,对应的会有一个引用计数,当发生赋值操作如a=b,对应的b的引用计数会 ...

  2. python申请内存函数_python进阶用法2 【从帮助函数看python内存申请机制】

    前言 介绍了四个帮助函数,dir(),help(),type(),id(),通过id()函数进一步分析了python在申请内存方面的效率问题,提到的基本类型有string,list,queue和deq ...

  3. python 内存回收机制_【第1题】 Pythonn内存管理以及垃圾回收机制

    内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...

  4. python内存管理机制_python内存管理机制

    python内存管理机制: 引用计数 垃圾回收(引用计数,标记清除,分带回收) 内存池 1. 引用计数 当一个python对象被引用时 其引用计数增加 1 ; 当其不再被变量引用时 引用计数减 1 ; ...

  5. python内存池机制,python基础—12python内存管理机制

    一.内存池机制 1.对象池 面试题目: python内存管理机制是什么? 1). 由于python中万物皆对象,内存管理机制就是对象的存储问题,Python会分 配一块内存空间去存储对象. 2) 对于 ...

  6. python内存管理错误的是_解读Python内存管理机制(转载)

    内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在Python的运行中,会创建和销毁大量的对象,这些都涉及到内存的管理. 小块空间的内 ...

  7. python内存的回收机制_python的内存管理和垃圾回收机制详解

    简单来说python的内存管理机制有三种 1)引用计数 2)垃圾回收 3)内存池 接下来我们来详细讲解这三种管理机制 1,引用计数: 引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用 ...

  8. Python 内存回收机制

    最近想了解一下Python的内存回收机制,特此来标记一下   平时在写代码的时候,关注的是写出能实现业务逻辑的代码,因为现在计算机的内存也比较宽裕,所以写程序的时候也就没怎么考虑垃圾回收这一方面的知识 ...

  9. python的内存调优_python内存机制与垃圾回收、调优手段

    一.python的内存机制 python中的内存机制 如下所示: _____ ______ ______ ________ [ int ] [ dict ] [ list ] ... [ string ...

最新文章

  1. 系列文章丨AlphaGo Zero, 对普通人来说意味着什么?
  2. 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
  3. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
  4. 基于ATT和CK™框架的开放式方法评估网络安全产品
  5. 【网络安全】Agent内存马的自动分析与查杀
  6. 让Win32窗口程序拥有控制台窗口
  7. Elasticsearch下安装ik分词器
  8. 人工智能(15)---宽动态摄像头
  9. OpenShift 4 MTC - 从 OpenShift 3 向 OpenShift 4 迁移应用
  10. java nio connect_服务器或客户端上的Java NIO套接字在什么时...
  11. 10部程序员必看的纪录片
  12. mysql进销存表设计_数据库设计:数据库进销存管理系统(包含有仓库出库入库触发器)...
  13. 彻底解决idea maven依赖报红报错问题
  14. 自信转运--《奇迹男孩》
  15. 启动springboot报错:程序包org.springframework.boot不存在
  16. 怎么用一个元素实现十字架
  17. JDBC报错:The server time zone value is unrecognized or represents more than one time zone 已解决
  18. ESB 企业服务总线基本内容概述
  19. linux交叉编译nss3,nspr
  20. 视觉SLAM学习笔记

热门文章

  1. 2018HBCPC个人题解
  2. oracle nvl nullif,OracleDBNVL、NVL2、NULLIF、COALESCE函数
  3. 63、基于51单片机红外遥控人体感应自动门控制系统设计
  4. python数据分析之matplotlib库(下)
  5. WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon
  6. python从小白到大牛视频资源下载_Python从小白到大牛 PDF 下载
  7. Cauchy-Schwarz不等式、Hölder不等式与Minkowski不等式
  8. 项目预算和核算管理过程文件
  9. [UE4]Lerp_3Color, 3ColorBlend, Lerp的区别
  10. git和github入门实践(5):Git 标签 tags 和 GitHub 版本 releases