Python对象的生命周期,以及周期方法

生命周期方法

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

__init__方法
    每个对象实例化的时候,都会自动执行这个方法
    可以在这个方法里面,初始化一些实例属性 

__del__方法
    当对象被释放的时候调用这个方法
    可用于在这个方法中清理资源 

生命周期方法案例

personCount为全局变量,可以任意修改,不安全 

Person.personCount和self.__class__.personCount两种写法都是可以的

在类外使用Person.personCount仍可以修改personCount的值,所以将personCount设置为私有属性

内存管理机制 

存储方面 

对于整数和短小的字符, Python会进行缓存; 不会创建多个相同对象
此时, 被多次赋值, 只会有多份引用

垃圾回收方面 

引用计数器

一个对象, 会记录着自身被引用的个数
每增加一个引用, 这个对象的引用计数会自动+1
每减少一个引用, 这个对象的引用计数会自动-1

查看引用计数
    import sys
    sys.getrefcount(对象)
    注意会大一

引用计数+1场景 

对象被创建
    p1 = Person()

对象被引用
    p2 = p1

对象被作为参数,传入到一个函数中
    log(p1)
    这里注意会+2, 因为内部有两个属性引用着这个参数 

对象作为一个元素,存储在容器中
    l = [p1] 

引用计数-1场景

对象的别名被显式销毁
        del p1

对象的别名被赋予新的对象
        p1 = 123

 一个对象离开它的作用域
        一个函数执行完毕时
        内部的局部变量关联的对象, 它的引用计数就会-1

对象所在的容器被销毁,或从容器中删除对象

循环引用问题

 垃圾回收时机

1. 自动回收
        开启垃圾回收机制
            gc.enable()
                开启垃圾回收机制(默认开启)
            gc.disable()
                关闭垃圾回收机制
            gc.isenabled()
                判定是否开启
 
        达到了垃圾回收的阈值
            垃圾回收器中, 新增的对象个数和释放的对象个数之差到达某个阈值
            涉及方法
                gc.get_threshold()
                    获取自动回收阈值
                gc.set_threshold()
                    设置自动回收阈值

2. 手动回收
    触发条件
        gc.collect()
        执行一次垃圾回收(开关状态无效)

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值