python:删除类实例,仅仅只有动态属性会被删除,类属性不会被删除

TL;DR(其实并不长.. 但是看标题就足够了)

import weakref

def print_death():
    print("Gone with the wind")

class test_class:
    a={1,2,3}
    def __init__(self):
      self.b={2,3,4}
_tc=test_class()
monitor=weakref.finalize(_tc,print_death)
monitor_a=weakref.finalize(_tc.a,print_death)
monitor_b=weakref.finalize(_tc.b,print_death)
del _tc

会输出什么? 在del一个实例的, 被del掉的只能是它的动态属性, 而不是类属性, 因为类属性还可以被引用到, 很简单, 就是通过test_class.a.
因此会输出2次.
当python程序结束时, 会显示最后一个没了.

原文地址:https://www.cnblogs.com/Tokubara/p/14203535.html