zoukankan      html  css  js  c++  java
  • python基础教程:Python中垃圾回收和del语句详解

    Python语言默认采用的垃圾收集机制是引用计数法,本文详细的介绍了Python中垃圾回收和del语句详解,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    Python中的垃圾回收算法是采用引用计数, 当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收

    https://tieba.baidu.com/p/6575202861

    a = "larry"
    b = a
    https://www.douban.com/group/topic/169020545/  马蜂窝刷粉丝
    larry这个字符串对象, 在第一行被贴了a标签后, 引用计数为1, 之后在第二行, 由贴上了b标签, 此时, 该字符串对象的引用计数为

    a = "larry"
    b = a
    del a

    注意: 在Python语言中, del语句操作某个对象的时候, 并不是直接将该对象在内存中删除, 而是将该对象的引用计数-1

    >>> a = "larry"
    >>> b = a
    >>> del a
    >>> id(b)
    4572141808
    >>> id(a)
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    id(a)
    NameError: name 'a' is not defined

    从以上示例中可以看出, larry这个字符串对象在第一行被贴上了a标签, 此时字符串对象的引用计数为1, 接着第二行又被贴上了b标签, 此时该字符串对象的引用计数为2, 在第三行中, del语言删除了a变量(标签), 在后续的print中可以看出, 内存中实际的字符串对象并没有被删除, del语言只是删除了一个变量对该字符串对象的引用, 所以对于larry这个字符串对象来说, 效果只是引用计数-1

    魔法函数之__del__
    类中的__del__魔法函数, 支持我们自定义清理对象的逻辑, 当Python解释器使用del语言删除类的对象的时候, 会自动调用类中的__del__函数, 我们可以对其进行重载

    >>> class Ref:
    ...
    ... def __init__(self, name):
    ... self.name = name
    ...
    ... def __del__(self):
    ... print("删除对象")
    ... del self.name
    ...
    >>>
    >>> r = Ref(name="larry")
    >>> print(r.name)
    larry
    >>>
    >>> del r

    删除对象

    >>>
    >>> print(r.name)
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    print(r.name)
    NameError: name 'r' is not defined

    我们可以通过重载__del__魔法函数, 自己灵活控制在del 对象的时候执行哪些善后操作
    内容就以上怎么多,最后给大家推荐一个口碑不错的公众号【程序员学府】,这里有很多的老前辈学习

    技巧,学习心得,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,

    每天都有程序员定时讲解Python技术,分享一些学习的方法和需要留意的小细节

  • 相关阅读:
    如何用一句话激怒设计师
    Kubernetes1.3:POD生命周期管理
    从零学React Native之11 TextInput
    从零学React Native之10Text
    html+js 在页面同步服务器时间
    电信行业的容器化改造之道
    容器化ICT融合初体验
    Laravel 发送邮件(最简单的讲解!)
    jquery( 点击按钮出来文本框并限制文本框的个数)
    OpenStack宣布用Kubernetes重写底层编排引擎
  • 原文地址:https://www.cnblogs.com/yuqiao668/p/12569373.html
Copyright © 2011-2022 走看看