Python内存管理与垃圾回收

news2025/1/19 11:22:06

Python内存管理与垃圾回收

  • 引用计数器
  • 标记清除
  • 分代回收
  • 缓存机制

※※引用计数器为主,标记清除和分代回收为辅+缓存机制

引用计数器

1.1 c语言中的环状双向链表refchain.:

在Python的C源码中有一个refchain的环状双向链表,Python程序当中一旦创建对象都会把这个对象添加到refchain这个链表当中,保存着所有的对象。
在这里插入图片描述

对于不同的python数据类型:

#字符型:
name='sb'
#数值型
age=18
#列表型
hobby=['唱''跳']

等等吧,可以分为单个元素的对象和由多个元素组成的对象。
在C源码中yongPyObject结构体来体现他们的相同部分–即:上一个对象,下一个对象,类型,引用个数。
在这里插入图片描述
其中 ob_refcnt就是引用计数器,在refchain中所有对象内部都有一个ob_refcnt用来保存当前对象的引用计数器。

对于由多个元素组成的对象在C源码中由PyVarObject来表示:
在这里插入图片描述
可见:像列表这样的多元素对象在定义时,内部会创建:【上一个对对象,下一个对象,类型,引用个数,元素个数ob_size】.
即多元素对象由 PyObject(相同部分)+ob_size 元素个数组成。
在这里插入图片描述

1.3Python中的不同数据类型用C语言封装的结构体

在这里插入图片描述
例如:浮点型对象data在refchain中存储的结构体的内部成员包括:
在这里插入图片描述

标记清除

2.1循环引用和交叉感染
对于下列这么一个问题:
在这里插入图片描述

  1. 将列表V2追加到V1中,相当于V1在指向自己原先数据的内存空间时,还会指向V2内存空间。即V2的引用计数器(ob_refcnt)+1变成了2.
  2. .执行del V2后, V2的引用计数器-1.变成了1。按理说V2本应该被删除,但是由于此时V2的引用计数器为1,并不为0,所以V2不会被删除。这样由于循环引用而出现了错误。

故为了解决这个循环引用带来的错误,Python引入标记清除。
在这里插入图片描述

分代回收

缓存机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个.Net简单、易用的配置文件操作库

在我们日常项目开发中,操作INI/CFG配置文件,往往会通过调用WinAPI来实现,WinAPI接口参数只支持字符串,而我们项目中,往往数据类型是多种多样的,在保存和获取配置值,我们就要进行类型的转换。 今…

【 uniapp - 黑马优购 | 购物车页面(3)】结算页面组件封装与渲染 (超详细代码讲解)

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️***个人主页🥇:***小新爱学习. 🐼***个人WeChat:见文末*** 🕊️***系列专栏&#xff1…

C语言 动态内存管理函数的 深度解析 #是不是对数组不能变大变小而烦恼呢?学会动态内存管理函数,消去数组耿直的烦恼#

文章目录前言为什么存在动态内存分配?malloc 和 free1.malloc2.free3.使用callocrealloc常见的动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6…

启动优化·基础论·浅析 Android 启动优化

“ 【小木箱成长营】启动优化系列文章(排期中): 启动优化 工具论 启动优化常见的六种工具 启动优化 方法论 这样做启动优化时长降低 70% 启动优化 实战论 手把手教你破解启动优化十大难题 ”一、引言 Hello,我是小木箱,欢迎来到小木箱成…

Transformer——day63 读论文:SST:用于多标签图像识别的空间和语义变压器

SST:用于多标签图像识别的空间和语义变压器SST:用于多标签图像识别的空间和语义变压器I. INTRODUCTIONII. RELATED WORKA. Multi-Label Image RecognitionB. Transformer in Computer VisionIII. APPROACHA. MotivationB. Recap of TransformerC. Modeli…

【Java寒假打卡】Java基础-多线程

【Java寒假打卡】Java基础-多线程概述读线程实现方式-继承Thread多线程实现方式-Callable三种实现方式的对比Thread方法守护线程线程的优先级概述 并发和并行 进程和线程 读线程实现方式-继承Thread 继承Thread类进行实现 package com.hfut.edu.test11;public class MyThr…

2022年最新年终奖个人所得税计算计算方法及扣税标准

1、2021年12月30号,国务院决定年终奖等三项个税优惠续期:http://www.gov.cn/zhengce/2021-12/30/content_5665553.htm2、税务总局公告2019年第35号《关于非居民个人和无住所居民个人有关个人所得税政策的公告》:http://www.gov.cn/zhengce/zh…

一、Django项目创建

一. Python项目虚拟环境创建 在项目开发过程中会下载很多第三方库,有时不同项目对同一个库的依赖版本不同,如果所有项目都使用同一个python环境就会起冲突不便于管理。因此,实际开发中会为每一个项目都单独创建一个python的虚拟环境。这里的…

多线程~POSIX信号量实现生产者消费者模型,PV操作

目录 1.信号量的概念 2.sem_t信号量的操作函数 (1).原理 (2).sem_t函数的使用 (3).基于信号量和环形队列的生产者消费者模型 1).大致实现思路 Task.hpp circular_queue.hpp circular_c…

基于java SSH框架的简单医疗管理系统源码+数据库,医疗管理系统基于springmvc+spring+hibernate

医疗管理系统 基于java SSH框架的简单医疗管理系统 环境说明 1、语言及开发环境: 语言实现说明JAVA后端用springmvcspringhibernate,前端使用htmlajax开发环境使用eclipse,maven管理。 数据库使用mysql; 完整代码下载地址&…

3D设计软件SolidWorks特征研究—— 3种放样方式 | 附视频教程

SolidWorks 是世界上第一个基于Windows开发的三维CAD系统,是可实现设计、模拟、成本估算、可制造性检查、CAM、可持续设计和数据管理等多种功能的三维设计软件,包含适用于钣金、焊件、曲面、模具、产品配置、DFM和CAM的专业工具,同时支持ECAD…

跑步耳机入耳式好还是半入耳式好、跑步用的耳机推荐

运动耳机一定是要跟佩戴舒适性、音质、性能关联在一起的,尤其是专业的运动耳机,还要具有久戴舒适运动时还不掉的特点,这个是我认为无论任何价价位的运动耳机都必须首要具备的条件,戴久了不舒服或者总掉,音质再好估计都…

带你了解防火墙

目录 1、什么是防火墙? 2、iptables 3、firewalld 如何实现端口转发? 1、什么是防火墙? 防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙又可以分为硬件…

Error: Can‘t find Python executable “python“, you can set the PYTHON env var

亲测可用,若有疑问请私信 此问题,自己分析了好久才找到问题。其实有两种解决方案,我这里举例了一个,另一种环境变量配置也是可以的。希望能帮到大家。 问题描述: 在执行npm install 过程中出现 V未安装 解决方案&…

Python学习笔记-PyQt6工具栏

工具栏工具栏可以有多个,而且可以设置不同的位置参数。4.1工具栏位置参数QtCore.Qt.ToolBarArea.LeftToolBarAreaQtCore.Qt.ToolBarArea.RightToolBarAreaQtCore.Qt.ToolBarArea.TopToolBarAreaQtCore.Qt.ToolBarArea.BottomToolBarAreaQtCore.Qt.ToolBarArea.AllTo…

库的制作相关信息

库 通过把函数进行打包,然后形成相应的库,供其他的主函数使用。 静态库 以.a进行结尾,把库的东西(头与库文件进行打包到之中)打包到可执行程序之中。 静态库不是使用相对的位置信息,直接的信息。 bank…

如何通过Java导出带格式的 Excel 数据到 Word 表格

在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件。但是如果表格比较长,内容就会存在一定程度的丢失,无法完整显示数据。并且当工作量到达一定程度…

.net6 Web Api使用JWT-从后端到前端全部过程

jwt是做验证的必经之路,至于原理,就不在叙述了,可以参考官网 jwt官网介绍 JSON Web Tokens - jwt.io 原理介绍 JSON Web Token 入门教程 - 阮一峰的网络日志 看完之后,结合这个图,就明白了。 本案例使用vs2022&…

从技术专家到总经理,在不确定中探索和成长

你好,我是石东海。 前段时间我应邀跟一些企业做过一些交流,探讨在这个数字化时代,怎么去解决技术团队所面临的一些共性问题,包括技术思维转变和管理思维转变方面所经历的挑战。期间谈到了一些我个人的经历,以及这两年…

哈希表(一)—— 闭散列 / 开放地址法的模拟实现

哈希表的基本思路是通过某种方式将某个值映射到对应的位置,这里的采取的方式是除留余数法,即将原本的值取模以后再存入到数组的对应下标,即便存入的值是一个字符串,也可以根据字符串哈希算法将字符串转换成对应的ASCII码值&#x…