这个代码是在看了“码农高天”的视频照模仿的。虽然 GC 能完成大部分内存管理的工作,但是基于性能计数器的GC确实存在小 Bug,这一点还是需要通过del
和gc.collect
手动管理。
from typing import Optionalclass Object:def __init__(self, name: str) -> None:self.obj: Optional[Object] = Noneself.name: str = namedef __del__(self):print(f"{self.name} is deleted")def main():A = Object("A")B = Object("B")A.obj = BB.obj = A # 循环计数引用if __name__ == "__main__":main()print("end")
当 main
函数执行完成后,可以看到两个声明的变量,A和B并没有像想象中那样,在main函数执行完成后删除,而是在程序退出时才被删除。