zoukankan      html  css  js  c++  java
  • 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的变量?

  • 相关阅读:
    洛谷P1120信息奥赛一本通1442 小木棍
    洛谷P1378 油滴扩展
    洛谷P1156 垃圾陷阱
    mybatis-Plus 实践篇之逆向工程
    Interceptor的使用及探究
    mysql,oracle,sqlServer 元数据查询
    navicat premium15免费版安装说明(附工具)
    打印日志你真的会吗?
    线程基础知识-必知必会
    空间复杂度&时间复杂度
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/15012739.html
Copyright © 2011-2022 走看看