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
