一、变量存哪了?

x = 10

当我们在p1.py中定义一个变量x = 10,那么计算机把这个变量值10存放在哪里呢了?我们回顾计算机的三大核心组件为:CPU、内存和硬盘。一定不是CPU,那是存放在内存还是硬盘中了呢?我们再回顾变量运行的三个过程,如果我们没有使用python解释器运行p1.py这个文件,那么x=10很明显只是很普通的四个字符x、=、1、0。而只有Python解释器运行了这个文件,那字符进入了内存,才会有变量这个概念。也就是说变量是存放在内存当中的。

变量存放在内存中这句话太宽泛了,我们把它具体化。现在想象我们在学校(电脑内存)里上课,学校每开一个班,学校都会开辟一个教室给这个班级上课用(存放变量值10),而班级的门牌号则是(变量名x)。也就是说,对于电脑内存这个大内存,每定义一个变量就会在这个大内存中开辟一个小空间,小空间内存放变量值10,然后内存给这个小空间一个变量名x(门牌号),x指向10。

二、Python垃圾回收机制

对于p1.py,如果我们再加上一段代码x = 11,大内存会开辟另一个小空间存储变量值11,把变量值绑定另一个门牌号x,但是由于之前有x,所以大内存会解除x与10的连接,让x与11连接。这个时候10由于没有了门牌号,所以成为了python眼中的垃圾,python就会处理这个垃圾,释放10的内存占用,这就是python的垃圾回收机制。而其他语言需要手动把10的内存占用释放掉。

2.1 引用计数

从上述的解释我们可以知道只要某个变量值绑定着门牌号,就不是垃圾,反之变量值没有绑定着门牌号,这个变量值就是垃圾,python就会自动清理这个垃圾。这里我们对于这个门牌号给定一个专业的解释,在python中这个门牌号被称作引用计数。

x = 10 # 10引用计数加1为1

y = x # 10引用计数加1为2

x = 11 # 10引用计数减1为1;11引用计数加1为1

del y # 10引用计数减1为0,触发python垃圾回收机制,python清理10的内存占用

上述代码就是一个引用计数加减的过程。

三、小整数池

对于上一节讲的引用计数,需要注意的是:Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被垃圾回收机制回收。

在pycharm中运行python程序时,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究。

python释放变量内存_Python变量内存管理相关推荐

  1. python竞赛内存_Python的内存机制浅析

    Python的内存管理大概分为三点: 引用计数 垃圾回收 内存池机制 这是我要讲的东西嘛?Of course! 肯定不是啊,这些网上都有我要讲的是人家没有的才好玩啊. No. 1  内存 内存是计算机 ...

  2. python变量回收_Python变量的引用、拷贝和回收机制

    1.Python中变量的引用 Python中的变量都是指针,都是某个内存对象的引用. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用" ...

  3. python创建变量过程_Python 变量的创建过程详解

    一.变量创建过程 首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事: 程序开辟了一块内存空间,将'Kwan'存储进去,再让变量名name指向'Kwan'所在的内 ...

  4. python输出变量地址_Python——变量

    笑虎:千行代码入门Python​zhuanlan.zhihu.com 函数的参数​www.liaoxuefeng.com Python学习之变量的作用域 - fireporsche - 博客园​www ...

  5. python公共变量声明_Python变量声明

    繁星coding 好的,首先要做的事情.Python中没有"变量声明"或"变量初始化"这样的东西.简直就是我们所谓的"任务",但应该只是称之 ...

  6. python定义变量参数_Python变量定义与使用

    前言 对于任何编程语言都存在对数据的处理,比如数字.字符串.字符等,我们可以直接使用数据,同时还可以将数据保存到变量中,方便以后使用.什么是变量?在任何语言里面都一样,可以把它看成是个小容器,专门用来 ...

  7. c++ 静态变量赋值_Python变量及常量解释说明

    变量 (1)在计算机程序中,变量不仅可以是数字,还可以是任意数据类型, 变量子啊程序中就是一个变量名表示的,变量名必须是大小写英文,数字,和"_"的组合,切不能以数字开头. a = ...

  8. python线程执行完后释放内存_python变量内存地址释放与加速并行计算多线程

    1.导入numba和gc包进行并行计算和内存释放 代码如下很容易的: #coding:utf-8 import time from numba import jit, prange, vectoriz ...

  9. python 释放线程内存_python变量内存地址释放与加速并行计算多线程

    1.导入numba和gc包进行并行计算和内存释放 代码如下很容易的: #coding:utf-8 import time from numba import jit, prange, vectoriz ...

最新文章

  1. Infoview表单转换研究(infopath---aspx)
  2. 如何动态添加菜单/菜单项、子菜单、右键菜单
  3. LeetCode 426. 将二叉搜索树转化为排序的双向链表
  4. 经纬度画轨迹图_HYSPLIT后向轨迹制作
  5. 安装rpm包命令_编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出...
  6. 努力一下,还是可以成为技术美术(TA)的
  7. 就业信息网进行服务器维护,服务器安全武汉大学黄石理工学院就业信息网.pptx...
  8. html图片多tab切换代码,CSS实现Tab页切换实例代码
  9. iOS 操作系统被曝无线网络命名bug 导致 iPhone无法连接无线网络
  10. docker登录密码错误_Docker安装运行Mysql 5.7.31容器并修改数据库密码
  11. OrzFAng系列–树 解题报告
  12. Android Studio中竟然还能加入一个程序员鼓励师
  13. Unity获取时间戳
  14. 设置无线网卡为AP工作模式(pi2和pi3)
  15. Chrom浏览器升级后检查元素时无法以html方式进行编辑
  16. 快快云安全,网站被劫持怎么办
  17. Attempted read from closed stream.
  18. 浅谈导航数据中POI搜索技术原理
  19. 北京化工大学数据结构2022/10/27作业 题解
  20. getElementsByTagName用法详解

热门文章

  1. 九段刀客:express连接MySQL并实现增、删、改、查
  2. Android Label 标签
  3. 使用PayPal补习注册(2/3):PayPal项目的真实注册
  4. TFTLCD 16位并口屏幕驱动
  5. 智联招聘如何设置公司屏蔽
  6. asp.net MVC使用EF框架进行分页讲解
  7. elf section类型_ELF格式解析库之基本数据类型
  8. 【qstock数据篇】行业概念板块与资金流
  9. Mybatis查询中使用游标
  10. (超详细的新手教程)怎么下载JDK包?