关键词搜索

源码搜索 ×
×

python基础教程:Python中垃圾回收和del语句详解

发布2021-01-10浏览371次

详情内容

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

a = “larry”
b = a

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
    
      11
    • 12
    • 13
    • 14
    • 15

    删除对象

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

    我们可以通过重载__del__魔法函数, 自己灵活控制在del 对象的python基础教程时候执行哪些善后操作

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

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载