变量定义:
eg: a = 1
b = 1
定义变量a时可以理解为 程序在内存地址中申请了一块地址存储数字1, 然后给这块地址起了一个别名叫 "a"并将 1的引用计数+1, 在定义变量b时又给这块地址起了别名叫"b"并将 1的引用计数+1。
变量名与变量值是一种绑定关系,变量名本身并没有储存值的功能。变量自身是没有地址的,变量的地址在Python中就是其指向的常量在内存中的地址。
局部变量,即定义在函数内部的变量。
当函数被执行时,Python 会为其分配一块临时的内存空间,所有在函数内部定义的变量,都会存储在这块空间中。而在函数执行完毕后,这块临时存储空间随即会被释放并回收,该空间中存储的变量自然也就无法再被使用。
即函数调用完就释放变量对内存地址的指向关系。
全局变量,即定义在函数外部的变量。
只要程序运行,就不会释放,除非你用del 变量名,才会将引用计数 -1;如果全局变量被多处引用,del变量将会引发程序错误。
程序结束时会释放并回收引用计数为0的全局变量占用的内存地址空间。[程序退出以后由于循环引用、malloc申请的内存导致GC没清理干净的,会由操作系统统一回收, 确保资源不会泄漏。]
个人疑问:CPython 在程序运行结束时还工作不?是否还回收引用计数为0的变量?