Python __del__()方法 内存回收 对象销毁

'''

    __del__():
    

    使用场景:


        1、当删除对象时,Python解析器会默认调用__del__()方法


        2、销毁(释放)内存中的对象时回调__del__()方法

'''

新建一个 User 类:

class User():
    def __init__(self):
        print('User 初始化成功---')

    def __del__(self):
        print('User 对象被回收---')


示例一:

# 创建一个user对象
u = User()

# 删除该User对象
del u

print('del u -------------')
'''
    执行结果:

        User 初始化成功---
        User 对象被回收---
        del u -------------

    代码解析:

        __del__() 方法在 print('del U -------------') 之前执行

        u = User() 在内存中创建了一个 User 对象,并且让变量 u 引用该内存的 User 对象

        del u 删除变量 u , 此时内存中的 User 对象没有任何变量,对其引用,Python解析器就会

        回调 __del__()方法,回收内存

'''


示例二:

u1 = User()

u2 = u1

del u1

print('del u1 -------')

del u2

print('del u2 -------')

'''
    执行结果:

        User 初始化成功---
        del u1 -------
        User 对象被回收---
        del u2 -------

    代码解析:

        u1 = User() 创建一块存放 User 对象的内存,并且,变量 u1 指向该内存

        u2 = u1 此处又新建变量 u2, 并且 u2 引用了 u1 的内存地址,此时,u1 和 u2 同时,

        引用同一个内存地址

        del u1 删除 u1 时,删除该变量对的引用,此时,由于内存中的 User 对象还在被 u2 引用,

        所以不会回收该内存(不会回调__del__()方法)

        del u2 删除 u2 后,内存中的 User 已经没有引用的变量,此时解释器才会对内存进行回收,回调
        __del__()方法
 

'''

示例三:

u3 = User()

print('u3 ------------')

'''
    pycharm中执行结果:

        User 初始化成功---
        u3 ------------
        User 对象被回收---
            
    Python自带的IDLE中执行结果:
    
         User 初始化成功---

         u3 ------------

    说明:新建一个__del__().py文件,把代码拷贝进去,使用Python自带的IDE打开,按F5运行即可看到效果

            
    代码解析:
    

        程序执行结束,所以内存被回收

        使用 Python 自带的编译器运行时,如果 __del__().py 没有关闭,则 u3 所引用的内存就不会被销毁,所以在

        Python自带的IDLE中执行结果中不会打印  ‘User 对象被回收---’

        如图1: 

             在__del__().py中的程序执行完成后,不关闭__del__().py文件,运行 print(u3),仍然可以打印 u3 的内存地址

    

'''

图1:



猜你喜欢

转载自blog.csdn.net/shihongji/article/details/80205376
今日推荐