python内存机制
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内存机制相关推荐
- python内存管理说法错误_python面试题总结1-内存管理机制
1.python内存管理机制 (1).引用计数 (2). 垃圾回收 (3). 内存池机制 引用计数 在python中每创建一个对象,对应的会有一个引用计数,当发生赋值操作如a=b,对应的b的引用计数会 ...
- python申请内存函数_python进阶用法2 【从帮助函数看python内存申请机制】
前言 介绍了四个帮助函数,dir(),help(),type(),id(),通过id()函数进一步分析了python在申请内存方面的效率问题,提到的基本类型有string,list,queue和deq ...
- python 内存回收机制_【第1题】 Pythonn内存管理以及垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- python内存管理机制_python内存管理机制
python内存管理机制: 引用计数 垃圾回收(引用计数,标记清除,分带回收) 内存池 1. 引用计数 当一个python对象被引用时 其引用计数增加 1 ; 当其不再被变量引用时 引用计数减 1 ; ...
- python内存池机制,python基础—12python内存管理机制
一.内存池机制 1.对象池 面试题目: python内存管理机制是什么? 1). 由于python中万物皆对象,内存管理机制就是对象的存储问题,Python会分 配一块内存空间去存储对象. 2) 对于 ...
- python内存管理错误的是_解读Python内存管理机制(转载)
内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在Python的运行中,会创建和销毁大量的对象,这些都涉及到内存的管理. 小块空间的内 ...
- python内存的回收机制_python的内存管理和垃圾回收机制详解
简单来说python的内存管理机制有三种 1)引用计数 2)垃圾回收 3)内存池 接下来我们来详细讲解这三种管理机制 1,引用计数: 引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用 ...
- Python 内存回收机制
最近想了解一下Python的内存回收机制,特此来标记一下 平时在写代码的时候,关注的是写出能实现业务逻辑的代码,因为现在计算机的内存也比较宽裕,所以写程序的时候也就没怎么考虑垃圾回收这一方面的知识 ...
- python的内存调优_python内存机制与垃圾回收、调优手段
一.python的内存机制 python中的内存机制 如下所示: _____ ______ ______ ________ [ int ] [ dict ] [ list ] ... [ string ...
最新文章
- 系列文章丨AlphaGo Zero, 对普通人来说意味着什么?
- 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
- 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
- 基于ATT和CK™框架的开放式方法评估网络安全产品
- 【网络安全】Agent内存马的自动分析与查杀
- 让Win32窗口程序拥有控制台窗口
- Elasticsearch下安装ik分词器
- 人工智能(15)---宽动态摄像头
- OpenShift 4 MTC - 从 OpenShift 3 向 OpenShift 4 迁移应用
- java nio connect_服务器或客户端上的Java NIO套接字在什么时...
- 10部程序员必看的纪录片
- mysql进销存表设计_数据库设计:数据库进销存管理系统(包含有仓库出库入库触发器)...
- 彻底解决idea maven依赖报红报错问题
- 自信转运--《奇迹男孩》
- 启动springboot报错:程序包org.springframework.boot不存在
- 怎么用一个元素实现十字架
- JDBC报错:The server time zone value is unrecognized or represents more than one time zone 已解决
- ESB 企业服务总线基本内容概述
- linux交叉编译nss3,nspr
- 视觉SLAM学习笔记
热门文章
- 2018HBCPC个人题解
- oracle nvl nullif,OracleDBNVL、NVL2、NULLIF、COALESCE函数
- 63、基于51单片机红外遥控人体感应自动门控制系统设计
- python数据分析之matplotlib库(下)
- WINDOWS API ——SETWINDOWLONG—— 设置窗口样式 SetWindowLong 函数原型为:LONG SetWindowLong(HWND hwnd,int nIndex,Lon
- python从小白到大牛视频资源下载_Python从小白到大牛 PDF 下载
- Cauchy-Schwarz不等式、Hölder不等式与Minkowski不等式
- 项目预算和核算管理过程文件
- [UE4]Lerp_3Color, 3ColorBlend, Lerp的区别
- git和github入门实践(5):Git 标签 tags 和 GitHub 版本 releases