Python 变量回收

变量定义

  eg: a = 1

     b = 1

  定义变量a时可以理解为 程序在内存地址中申请了一块地址存储数字1, 然后给这块地址起了一个别名叫 "a"并将 1的引用计数+1, 在定义变量b时又给这块地址起了别名叫"b"并将 1的引用计数+1。

  变量名与变量值是一种绑定关系,变量名本身并没有储存值的功能。变量自身是没有地址的,变量的地址在Python中就是其指向的常量在内存中的地址。

 

局部变量,即定义在函数内部的变量。

  当函数被执行时,Python 会为其分配一块临时的内存空间,所有在函数内部定义的变量,都会存储在这块空间中。而在函数执行完毕后,这块临时存储空间随即会被释放并回收,该空间中存储的变量自然也就无法再被使用。

  即函数调用完就释放变量对内存地址的指向关系。

 

全局变量,即定义在函数外部的变量。

  只要程序运行,就不会释放,除非你用del 变量名,才会将引用计数 -1;如果全局变量被多处引用,del变量将会引发程序错误。

  程序结束时会释放并回收引用计数为0的全局变量占用的内存地址空间。[程序退出以后由于循环引用、malloc申请的内存导致GC没清理干净的,会由操作系统统一回收, 确保资源不会泄漏。]

 

个人疑问:CPython 在程序运行结束时还工作不?是否还回收引用计数为0的变量?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章