zoukankan      html  css  js  c++  java
  • python变量的内存管理

    python变量的内存管理

    一、变量存在了哪里?

    先让我们来看一段代码:

    height = 100  # 定义变量
    # print(100) # print会自动帮你创建一个变量100,打印完之后,马上释放100的内存空间
    

    定义一个变量,内存就开辟一个内存空间存储这个变量

    二、python的垃圾回收机制

    我们先来看一段代码:

    x = 10  #定义一个变量x=10
    x = 11  #定义一个变量x=11
    

    我们定义了一个变量X=10,如果我们再加上一段代码x = 11,大内存会开辟另一个小空间存储变量值11,把变量值绑定另一个x,但是由于之前有x,所以大内存会解除x与10的连接,让x与11连接。这个时候10由于没有了变量名,所以成为了python眼中的垃圾,python就会处理这个垃圾,释放10的内存占用,这就是python的垃圾回收机制。

    三、引用计数(针对变量值)

    我们来看一段代码

    height = X  # 180的引用计数加1
    
    x = height  # 180的引用计数加1
    
    del x   # 释放的是引用计数,180的引用计数为1
    
    del height # 引用计数为0,
    

    如图所示,可以帮助大家更好理解

    注意:引用计数为0时,触发垃圾回收机制,释放内存占用

    四、小整数池

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

    也就是说:-5,256在python解释器启动的时候就自动开辟了,所以说他不会受垃圾回收机制的影响,适用于jupyter。
    pycharm出于对性能的考虑,会扩大小整数池的范围,在其中做了优化,间隔时间短的,无论多大,id都一样。

  • 相关阅读:
    关于MySQL死锁
    随手一记,maven打包
    js生成带logo的二维码
    java生成带logo的二维码
    关于网页中文本域高度自动适应问题,参考微信回复
    从git上拉下来的严选weex项目demo
    补装老版本的Java SE
    新MBP使用git命令时启用xcode的终端log
    电脑出现“损坏的图像”窗口提示dll没有被指定在Windows上运行如何解决
    不同浏览器隐藏默认表单样式
  • 原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11265220.html
Copyright © 2011-2022 走看看