zoukankan      html  css  js  c++  java
  • 浅析python析构函数

    构造方法__init__,具有初始化的作用,也就是当该类被实例化的时候就会自动执行该函数。那么通常就可以把要先初始化的属性放到这个方法里面。

    析构方法__del__是对象在被垃圾回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用, 回收内存.
    内存回收的方式有两种:

    构造方法__init__,具有初始化的作用,也就是当该类被实例化的时候就会自动执行该函数。那么通常就可以把要先初始化的属性放到这个方法里面。

    析构方法__del__是对象在被垃圾回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用, 回收内存.
    内存回收的方式有两种:

    1、当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数会被调用一次,这样可以用来释放内存空间

    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    class Foo:
        #初始化方法
        #创建完对象后会自动被调用
        def __init__(self):
            print('构造方法被调用')
    
        #析构方法
        #当对象被删除时,会自动被调用,然后释放内存
        def __del__(self):
            print('脚本运行结束, 释放内存')
    
    
    #创建对象
    f = Foo()
    print('这应该是脚本最后一句.')#!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    class Foo:
        #初始化方法
        #创建完对象后会自动被调用
        def __init__(self):
            print('构造方法被调用')
    
        #析构方法
        #当对象被删除时,会自动被调用,然后释放内存
        def __del__(self):
            print('脚本运行结束, 释放内存')
    
    
    #创建对象
    f = Foo()
    print('这应该是脚本最后一句.')

    运行结果:

    构造方法被调用
    这应该是脚本最后一句.
    脚本运行结束, 释放内存

    正确运行时不会去调用__del__方法, 会先打印"这应该是脚本最后一句." 当对象结束其生命周期时(例如对象所在的函数已经调用完毕), 系统会自动执行析构函数,析构函数往往用来做清理善后的工作. 所以打印"脚本运行结束, 释放内存"成了最后执行的语句.

    2、当使用del 删除对象时,会调用他本身的析构函数, 相当于手动释放内存

    class Foo:
        #初始化方法
        #创建完对象后会自动被调用
        def __init__(self):
            print('构造方法被调用')
    
        #析构方法
        #当对象被删除时,会自动被调用,然后释放内存
        def __del__(self):
            print('脚本运行结束, 释放内存')
    
    
    #创建对象
    f = Foo()
    #删除对象
    del f
    print('这应该是脚本最后一句.')

    运行结果:

    构造方法被调用
    脚本运行结束, 释放内存
    这应该是脚本最后一句.

    del f语句执行时候, 内存立即被回收, 即执行打印"脚本运行结束, 释放内存". 最后才是执行打印"这应该是脚本最后一句."

    作用通常是销毁/删除临时的变量,主要对那些长期占用内存的临时变量进行销毁.

  • 相关阅读:
    共享纸巾更换主板代码分析 共享纸巾主板更换后的对接代码
    Python Django Ajax 传递列表数据
    Python Django migrate 报错解决办法
    Python 创建字典的多种方式
    Python 两个list合并成一个字典
    Python 正则 re.sub替换
    python Django Ajax基础
    Python Django 获取表单数据的三种方式
    python Django html 模板循环条件
    Python Django ORM 字段类型、参数、外键操作
  • 原文地址:https://www.cnblogs.com/fat-girl-spring/p/14870355.html
Copyright © 2011-2022 走看看