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

Python类和对象--生命周期方法(对象生命周期,内存管理机制-存储,垃圾回收)

目录

1.生命周期概念

2.监听对象生命周期

3.内存管理机制

1.存储方面

2.垃圾回收方面

1>引用计数器

2>循环引用

3>垃圾回收


1.生命周期概念

指的是一个对象,从诞生到消亡的过程;

当一个对象被创建时,会在内存中分配相应的内存空间进行存储;

当这个对象不再使用,为了节约内存,就会把这个对象释放

涉及问题:

如何监听一个对象的生命过程?

Python是如何掌控一个对象的生命?

2.监听对象生命周期

__new__方法

当我们创建一个对象时,用于给这个对象分配内存的方法

通过拦截这个方法,可以修改对象的创建过程,比如:单例设计模式

class Person:def __new__(cls, *args, **kwargs):print("新建了一个对象,但是被拦截了")pass# 新建了一个对象,但是被拦截了
# None
p=Person()
print(p)

__init__方法

初始化方法

当对象被创建时,会自动调用这个方法,会把p实例 传递给self,所以操作self就相当于操作外界的Person实例对象。

__del__方法

当对象被释放时,会自动调用这个方法

想要提前释放,就用del p

class Person:# def __new__(cls, *args, **kwargs):#     print("新建了一个对象,但是被拦截了")def __init__(self):print("初始化方法")self.name='sz'def __del__(self):print("这个对象被释放了")# 初始化方法
# <__main__.Person object at 0x000001975F6B0A90>
# sz
# 这个对象被释放了
p=Person()
print(p)
print(p.name)

小案例

# Person类,打印一下,当前这个时刻,由Person类产生的实例,有多少个
# 创建一个实例,计数+1,如果删除一个实例,计数-1
class Person:__PersonCount=0def __init__(self):print("计数+1")Person.__PersonCount+=1def __del__(self):print("计数-1")self.__class__.__PersonCount-=1@classmethoddef log(cls):print("当前个数%d"%Person.__PersonCount)Person.personCount=100
p=Person()
p2=Person()
Person.log()
del p
del p2
Person.log()# 计数+1
# 计数+1
# 当前个数2
# 计数-1
# 计数-1
# 当前个数0
3.内存管理机制
1.存储方面

1.在Python中万物皆对象,不存在基本数据类型。

0,1.2,True,False,"abc",这些全都是对象。

2.所有对象,都会在内存中开辟一块空间进行存储,

会根据不同的类型以及内容,开辟不同的空间大小进行存储;

返回该空间的地址给外界接收(称为“引用”),用于后续对这个对象的操作,可通过id()函数获取内存地址(10进制),通过hex()函数可以查看对应的1

http://www.dtcms.com/a/568972.html

相关文章:

  • PAIMON+STARROCKS 学习
  • *曲速引擎的核心思想
  • AI时代下医药项目管理效能提升与知识管理案例分享︱奥锐特药业研发中心主任庄守群
  • 路由器构建园区网
  • 陕西建设网站如何建立免费网站
  • 设计网站账号品牌策划公司广告语
  • 二十一、kubernetes 1.29 之 运维 03
  • 【论文精读】CMD:迈向高效视频生成的新范式
  • 技术实践 | 延趣游戏用户分层体系:基于TE系统实现精细化运营与流水增长
  • 【硬件SDK项目】uniapp框架设计与业务开发
  • 做推广必须知道的网站淮南网络建站公司
  • tcp 丢包分析
  • 基于改进Gerchberg–Saxton算法的全息图相位恢复方法研究
  • 【ISO8601】ISO8601 Rust 库完整学习指南
  • 辽宁沈阳做网站贷款公司网站模板
  • 【数论】乘法逆元(求逆元的三种方式)
  • c++ 引用包装器的用法
  • ArrayList数据结构-数组篇
  • 合肥建设工程信息网站网站pc端和手机端分离怎么做
  • 广州网站建设费上海手机网站
  • Memento:让大模型智能体“自己变聪明”,不用微调模型权重
  • Java中的设计模式------简单工厂设计模式
  • 记录:win10环境手动编译tcl源码过程
  • SQL Server集群网络详解:心跳IP与管理IP
  • k8s的包管理工具(4)--helm3子模板的使用
  • 【C++】关于list的使用底层实现
  • Ubuntu安装单节点MicroK8s
  • Ubuntu22.04单节点部署k8s(无需外网)
  • 网站策划和运营微信最火的公众号排行
  • 北京景网站建设北京网站被处罚