Python内存机制,为什么说python是基于值的内存管理模式

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: