Python内存机制,为什么说python是基于值的内存管理模式
本章主要介绍Pyhon的内存管理,以Pyhon的计数机制为引子,介绍Pyhon的内存管理方式。感兴趣的朋友看看。
00-1010什么是内存管理机制一、引用计数机制二、数据池和缓存
目录
在python中创建一个对象,首先会申请一个内存地址,然后初始化对象,所有的对象都会维护在一个。
在名为refchain的双向循环链表中,每个数据保存以下信息:
1.链表中数据前后的数据指针
2.数据类型
3.数据值
4.数据的参考计数
5.数据长度(列表,字典.)
什么是内存管理机制
参考计数增加:
1.1创建对象。
1.2该对象被其他变量引用(另一个名称)
1.3对象作为元素放在容器中(例如,它们作为元素放在列表中)。
1.4对象作为参数传递给函数。
导入系统
A=[11,22] #对象被创建
B=另一个变量引用了#对象。
C=[111,222,333,a] #对象作为元素放在容器中。
#获取对象的引用计数
Print(sys.getrefcount(a)) #对象作为参数传递给函数
作为最终执行的结果,变量A被引用了四次。
参考计数减少:
对象的别名被显式销毁。该对象的别名被分配给其他对象(例如,如果原始的a=10被更改为a=100,则10的引用计数会减少)。对象从容器中移除,或者容器被销毁(例如,对象从列表中移除,或者列表被销毁)。引用离开它的作用域(函数运行后,调用函数时传入的参数。
del b #对象的别名被显式销毁。
B=999 #对象的别名被分配给其他对象。
Del c #列表被销毁(容器被销毁)
C.pop() #删除最后一个列表数据(对象从容器中移除)
一、引用计数机制
有两种类型的数据池:小整数池和大整数池。
小整数池(介于-5和256之间的数据)
运行机制:Python自动将-5到256的整数缓存到一个小的整数池中,当你将这些整数赋给变量时,它们不会被重新创建。
创建对象,但使用已经创建的缓存对象。当删除对这些数据的引用时,它们将不会被回收。
超过-5到256的整数不会被缓存,对象将被重新创建。
例如:
超过-5到256的整数不会被缓存,Python会重新创建对象并返回id。
#场景一:数据是列表,不在-5~256范围内。
甲=[11]
b=[11]
身份证(a),身份证(b)
(1693226918600,1693231858248)=====" ID不同。
#场景2:数据是一个整数,范围从-5到256。
aa=11
bb=11
身份证(aa),身份证(bb)
(140720470385616,140720470385616)身份证
#场景3:数据不在-5~256范围内
bb=-7
aa=-7
身份证(aa),身份证(bb)
(1843518717904,1843518717776) id不同。
#场景4:数据不在-5~256范围内
a=257
b=257
身份证(a),身份证(b)
(2092420910928,2092420911056) id不同。
大整数池(字符串常驻池/实习生机制)
优点:在创建一个新的字符串对象时,首先会发现缓存池中是否存在一个具有相同值(标识符,即只包含数字、字母和下划线的字符串)的现有对象。如果有,可以直接拿来用(引用),避免频繁创建和破坏内存,提高效率。
例如:
对于不在标识符中的数据,它不会被缓存,Python将重新创建对象并返回id。
#场景1:
a=123adsf_
b=123adsf_
身份证(a),身份证(b)
(61173296,61173296)======"ID相同。
#场景2:
b1=123adsf_?
b2=123adsf_?
身份证(b1),身份证(b2)
(61173376,61173416) id不同。
缓存机制
对于python中常用的内置数据类型的缓存:
Float:缓存100个对象
列表: 80个对象
字典: 80个对象
Set: 80个对象
元组:根据元组数据的长度缓存元组长度为0-20的对象。
关于Python对内存管理机制的超详细解释的这篇文章到此为止。有关Python内存管理的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。