当前位置: 首页 > news >正文

Python生命周期及内存管理

文章目录

  • 一、Python的生命周期
    • 1、概念
    • 2、如何监听生命周期
  • 二、内存管理
    • 1.存储
    • 2.垃圾回收
    • 3.引用计数

一、生命周期:

        1、概念:一个对象从创建到消亡的过程

        当一个对象呗创建是,会在内存中分配响应的内存空间进行存储
        当这个对象不再使用,为了节约内存,会把这个对象释放

        2、如何监听生命周期:

                1、(__new__):当我们创建一个对象时,用于给这个对象分配内存,通过拦截这个方法,可以修改创建对象的过程:例如单例模式

        使用使用装饰器(使用了装饰器的类会变成单例类)

def single_class(cls):instance = {}def single(*args, **kwargs):if cls not in instance:instance[cls] = cls(*args, **kwargs)return instance[cls]else:return instance[cls]return single@single_class
class Man(object):pass
man1 = Man()
man2= Man()
print(man1)
print(man2)


                2、(__init__):实例化对象的时候执行此方法
                3、(__del__):进程结束的时候执行

二、内存管理机制

1.存储方面

        1、万物皆对象

        2、所有对象都会开辟内存存储

        3、整形及短小字符Python会缓存,不会创建多个相同对象

        4、容器对象,仅仅是其他对象的引用,不是对象本身


2、垃圾回收

        1、引用计数

                1、概念:一个对象记录着本身被引用的次数

                2、描述:当增加一个引用,计数+1;当减少一个引用,计数-1;引用=0时释放内存

                3、计数+1场景:对象创建;对象被引用;对应被当做参数传入函数;对象被当做元素放在容器中

                 4、计数-1场景:被显试销毁;引用别名被赋值(覆盖);离开作用域(函数执行结束);容器销毁

                查看计数:sys模块

        2、垃圾回收

                1、作用:解决引用计数未释放的对象(容器对象)

                2、底层机制

                        1、收集容器对象 通过双向连表引用
                        2、对每个容器,通过变量gc_refs记录引用计数
                        3、找到引用他的容器,然后计数-1
                        4、经过三个步骤,如果计数为0,就可以释放了

                3、分代回收(减少垃圾检测的频率)(新增对象达到一定数量才会触发)

                        1、默认刚创建的对象属于0代
                        2、如果经历一代回收,依然存活,就划分下一代
                        3、回收周期顺序:0代回收一定次数(可自定义),触发0代和1代回收;1代回收一定次数,触发0代,1代,2代回收
                        4、查看默认参数及自定义参数 gc gc.get_threshold()  gc.set_threshold(700, 10, 5)

                4、补充:自定义参数设置

                         自定义设置 

import gc
gc.disable()
print("gc.disable 开启状态", gc.isenabled())
gc.enable()
print("gc.enable 开启状态", gc.isenabled())
print("gc获取默认参数:", gc.get_threshold())
gc.set_threshold(1000, 20, 10)
print("gc获取自定义参数:", gc.get_threshold())

                        输出结果

gc.disable 开启状态 False
gc.enable 开启状态 True
gc获取默认参数: (700, 10, 10)
gc获取自定义参数: (1000, 20, 10)

相关文章:

Python生命周期及内存管理

文章目录 一、Python的生命周期 1、概念2、如何监听生命周期二、内存管理 1.存储2.垃圾回收3.引用计数一、生命周期: 1、概念:一个对象从创建到消亡的过程 当一个对象呗创建是,会在内存中分配响应的内存空间进行存储 当这个对象不再使…...

Elasticsearch7.8.0版本进阶——数据写流程

目录一、数据写流程概述二、数据写流程步骤2.1、数据写流程图2.2、数据写流程步骤(新建索引和删除文档所需要的步骤顺序)2.3、数据写流程的请求参数一、数据写流程概述 新建、删除索引和新建、删除文档的请求都是写操作, 必须在主分片上面完…...

化学试剂Glutaric Acid-PEG-Glutaric Acid,GA-PEG-GA,戊二酸-聚乙二醇-戊二酸

一:产品描述 1、名称 英文:Glutaric Acid-PEG-Glutaric Acid,GA-PEG-GA 中文:戊二酸-聚乙二醇-戊二酸 2、CAS编号:N/A 3、所属分类:Carboxylic acid PEG 4、分子量:可定制, 戊…...

知识图谱业务落地技术推荐之国内知识图谱平台汇总(竞品)[阿里、腾讯、华为等】

各位可以参考国内知识图谱平台产品进行对技术链路搭建和产品参考提供借鉴。...

ABC 289 G - Shopping in AtCoder store 数学推导+凸包

大意&#xff1a; n个顾客&#xff0c;每个人有一个购买的欲望bi,m件物品&#xff0c;每一件物品有一个价值ci,每一个顾客会买商品当且仅当bici>定价. 现在要求对每一个商品定价&#xff0c;求出它的最大销售值&#xff08;数量*定价&#xff09; n,m<2e5 思路&#x…...

ARM Linux 如何在sysfs用户态命令行中控制 GPIO 引脚?

ARM Linux 如何在sysfs用户态命令行中控制 GPIO 引脚&#xff1f;我们在开发工作中&#xff0c;经常需要确定内核gpio驱动&#xff0c;是否有异常&#xff0c;或者在没有应用的情况下&#xff0c;像控制某个外设&#xff0c;这时我们就可以在控制台命令行中&#xff0c;用命令导…...

【Linux】生产者消费者模型 - 详解

目录 一.生产者消费者模型概念 1.为何要使用生产者消费者模型 2.生产者消费者之间的关系 3.生产者消费者模型的优点 二.基于阻塞队列的生产消费模型 1.在阻塞队列中的三种关系 2.BlockingQueue.hpp - 阻塞队列类 3.LockGurad.hpp - RAII互斥锁类 4.Task.hpp - 在阻塞队…...

源码深度解析Spring Bean的加载

在应用spring 的过程中&#xff0c;就会涉及到bean的加载&#xff0c;bean的加载经历一个相当复杂的过程&#xff0c;bean的加载入口如下&#xff1a; 使用getBean&#xff08;&#xff09;方法进行加载Bean&#xff0c;最终调用的是AbstractBeanFactory.doGetBean() 进行Bean的…...

STL——priority_queue

一、priority_queue介绍及使用 1.priority_queue文档介绍 &#xff08;1&#xff09;优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。 &#xff08;2&#xff09;此上下文类似与堆&#xff0c;在堆中可以…...

Springboot集成工作流Activity

介绍 官网&#xff1a;https://www.activiti.org/ 一 、工作流介绍 1.工作流&#xff08;workflow&#xff09; 就是通过计算机对业务流程自动化执行管理&#xff0c;它主要解决的是“使在多个参与这之间按照某种预定义规则自动化进行传递文档、信息或任务的过程&#xff0c…...

2023软件测试工程师涨薪攻略,3年如何达到月薪30K?

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪&#xff0c;而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试&#xff0c;是希望能够日…...

Java面试——Spring Bean相关知识

目录 1.Bean的定义 2.Bean的生命周期 3.BeanFactory及Factory Bean 4.Bean的作用域 5.Bean的线程安全问题 1.Bean的定义 JavaBean是描述Java的软件组件模型。在Java模型中&#xff0c;通过JavaBean可以无限扩充Java程序的功能&#xff0c;通过JavaBean的组合可以快速的生…...

上班在群里摸鱼,逮到一个字节8年测试开发,聊过之后羞愧难当...

老话说的好&#xff0c;这人呐&#xff0c;一旦在某个领域鲜有敌手了&#xff0c;就会闲得某疼。前几天我在上班摸鱼刷群的时候认识了一位字节测试开发大佬&#xff0c;在字节工作了8年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有一…...

HTTP、WebSocket和Socket.IO

一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同&#xff0c; 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端&#xff0c; 而提供资源响应的一端称…...

Fluent Python 笔记 第 11 章 接口:从协议到抽象基类

本章讨论的话题是接口:从鸭子类型的代表特征动态协议&#xff0c;到使接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class&#xff0c;ABC)。 11.1 Python 文化中的接口和协议 对 Python 程序员来说&#xff0c;“X 类对象”“X 协 议”和“X 接口”都是一个…...

【Spark分布式内存计算框架——Spark Core】11. Spark 内核调度(下)

8.5 Spark 基本概念 Spark Application运行时&#xff0c;涵盖很多概念&#xff0c;主要如下表格&#xff1a; 官方文档&#xff1a;http://spark.apache.org/docs/2.4.5/cluster-overview.html#glossary Application&#xff1a;指的是用户编写的Spark应用程序/代码&#x…...

Java中的函数

1.String.trim() : 主要有2个用法&#xff1a; 1、就是去掉字符串中前后的空白&#xff1b;这个方法的主要可以使用在判断用户输入的密码之类的。 2、它不仅可以去除空白&#xff0c;还可以去除字符串中的制表符&#xff0c;如 ‘\t’,\n等。 2.Integer.parseInt() : 字符串…...

实验6-霍纳法则及变治技术

目录 1.霍纳法则(Horners rule) 2.堆排序 3.求a的n次幂 1.霍纳法则(Horners rule) 【问题描述】用霍纳法则求一个多项式在一个给定点的值 【输入形式】输入三行,第一行是一个整数n,表示的是多项式的最高次数;第二行多项式的系数组P[0...n](从低到高存储);第三行是…...

IP地址:揭晓安欣警官自证清白的黑科技

《狂飙》这部电视剧&#xff0c;此从播出以来可谓是火爆了&#xff0c;想必大家都是看过的。剧中&#xff0c;主人公“安欣”是一名警察。一直在与犯罪分子做斗争。 莽村的李顺案中&#xff0c;有匿名者这个案件在网上发帖恶意造谣&#xff0c;说安欣是黑恶势力的保护伞&#…...

考研复试机试 | C++

目录1.盛水最多的容器<11>题目代码&#xff1a;2.整数转罗马数字题目&#xff1a;代码&#xff1a;3. 清华大学机试题 abc题目题解4.清华大学机试题 反序数题目描述代码对称平方数题目代码&#xff1a;5. 杭电上机题 叠筐题目&#xff1a;代码pass&#xff1a;关于清华大…...

别再折腾Windows了!用Mac或Linux搞定ACM LaTeX模板的字体难题(附保姆级配置流程)

跨平台LaTeX写作&#xff1a;为什么macOS和Linux是ACM模板的最佳选择 第一次接触ACM LaTeX模板的研究人员&#xff0c;往往会在字体兼容性问题上耗费大量时间——特别是Windows用户。当你反复尝试安装Libertine字体、解决各种编译错误时&#xff0c;是否想过问题可能出在操作系…...

一站式解决Windows程序运行问题的Visual C++运行库修复指南

一站式解决Windows程序运行问题的Visual C运行库修复指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时突然弹窗提示"缺少msv…...

从B站视频到跑通代码:手把手复现大疆C板控制M2006电机的完整流程(STM32CubeMX + C610电调)

大疆C板驱动M2006电机全流程解析&#xff1a;从CubeMX配置到CAN通信实战 第一次拿到大疆RoboMaster C板时&#xff0c;看着官方文档和一堆外设确实有点无从下手。特别是当需要控制M2006这种高性能电机时&#xff0c;文档中的信息分散在不同章节&#xff0c;而社区里的完整教程又…...

Perplexity学术模式到底有多“实时”?我们用NIST标准测试集连续监控72小时,结果让3所常春藤图书馆紧急更新采购清单…

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity学术模式到底有多“实时”&#xff1f;我们用NIST标准测试集连续监控72小时&#xff0c;结果让3所常春藤图书馆紧急更新采购清单… 实时性验证方法论 我们采用 NIST TREC 2023 Dynamic Filt…...

终极指南:5步安装Koikatu HF Patch解锁完整游戏体验

终极指南&#xff1a;5步安装Koikatu HF Patch解锁完整游戏体验 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch KK-HF Patch是专为《恋活&#xf…...

别再搞混了!Web地图开发必懂的EPSG:4326和EPSG:3857(附JavaScript转换代码)

Web地图开发中的坐标系解密&#xff1a;从原理到实战 第一次在Leaflet地图上叠加GPS轨迹数据时&#xff0c;我盯着那个偏离了三条街的路径百思不得其解——经纬度坐标明明正确&#xff0c;为什么显示位置完全不对&#xff1f;这个困扰无数Web开发者的经典问题&#xff0c;根源在…...

AI营销技能库:模块化设计提升Claude Code与智能体工作流效率

1. 项目概述&#xff1a;一个为AI营销工作流设计的技能库如果你正在用Claude Code、Cursor这类AI编程工具做营销、内容创作或增长相关的工作&#xff0c;并且感觉每次都要花大量时间写重复的提示词&#xff0c;或者希望团队能有一套标准化的AI工作流程&#xff0c;那么这个名为…...

WechatDecrypt技术实现:如何通过开源工具实现微信数据本地解密与隐私保护

WechatDecrypt技术实现&#xff1a;如何通过开源工具实现微信数据本地解密与隐私保护 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字化时代&#xff0c;数据隐私保护已成为技术开发者和普通用户共…...

黑莓印相≠复古滤镜!基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案(附Python验证脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;黑莓印相≠复古滤镜&#xff01;基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案&#xff08;附Python验证脚本&#xff09; 黑莓印相&#xff08;Blackberry Print Tone&#xff09;常被误认为是…...

League Akari:英雄联盟玩家的终极智能助手,5大核心功能全面解析

League Akari&#xff1a;英雄联盟玩家的终极智能助手&#xff0c;5大核心功能全面解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为…...