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的变量?

  • 相关阅读:
    C字符串处理函数
    C语言字符串函数大全
    那些闪亮的日子
    牛客网在线编程:幸运数
    牛客网在线编程:水仙花数
    [LeetCode]617.Merge Two Binary Trees
    [LeetCode]657.Judge Route Circle
    [LeetCode]141. Linked List Cycle
    五大算法:分治,贪心,动态规划,回溯,分支界定
    [LeetCode]387.First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/15012739.html
Copyright © 2011-2022 走看看