PYTHON 内存机制

1.1.内存分析

初学python时,运行python程序时,我们大部分只关注运算的结果的正确性,很少会去想当python源代码运行在python解释器中,是怎样运行的?
计算机运行一个程序

  • python 源代码[.py文件,源代码] 解释处理 ->得到字节码【二进制数据】,生成.pyc文件【临时文件】-> 运行【将二进制数据,加载到内存】->
    • 运算【提取关键数据,参与运算,得到结果】
    • 渲染展示到界面上

程序/软件的运行【核心机制】

  • 源代码程序【语义化(用自然语言)的定义类数据流程等控制单元】
  • 内存操作【加载内存–>变量/函数/类型/方法…】
  • 运算处理【执行运算的过程,需要提取数据执行运算(按照流程进行逻辑控制)】
    所有的软件,不论编程语言是c、java、c#等等,都是按照上的运行机制运行的。那么既然是这样,为什么还要分析运行过程的内存?

因为所有的资源都是有限的,包括硬件资源,如果想要在有限的硬件资源上,运行尽可能多的软件,需要有效的利用内存空间【软件运行时,需要内存空间,若空间不足以满足软件运行所需要的空间,那么软件将不会执行或以最简的方式运行(软件界面可能会出现卡顿、断帧等现象,运行不流畅)

计算机的结构相对于刚接触的人来说比较复杂,很难了解内部结构。内存属于计算机的硬件部分,所以这里大致说一下计算机的硬件:
计算机硬件【内存|硬件都为8G】

  • 操作系统【系统软件】:控制和管理硬件系统,完成软件数据处理 (每一台计算机都会有操作系统[windows/mac/linux])
    • 使用硬件内存运行操作系统软件【2G已用|6G可用】
    • 直接分配内存空间,操作使用内存数据
      • 应用软件:执行各种业务相关的数据运算【每一个软件运行,都需要内存】

      应用软件运行时:
      1,向操作系统申请内存,操作系统给对应的软件分配内存
      2,软件在申请到的内存中分配数据,加载数据,完成软件的执行
      ===================================
      软件的运行,需要将软件数据加载到内存中

1.2.PYTHON 中的内存处理

我们都知道python需要一个开发/运行的环境,开发好的python程序可以通过执行命令执行

python XXX.py

一个程序或软件中的数据有很多,当加载数据时,在申请到的内存空间里,数据可能会比较混乱,不利于程序的执行,也会浪费很大的空间。
为了提高程序的执行效率和有效的利用内存空间,将申请到的内存空间进行了区域划分

  • 栈内存(变量)和堆内存(对象)
    • 栈内存:数据不稳定,分配/释放效率高;
    • 堆内存:数据稳定(一旦建立,基本上直到程序结束才释放),分配/释放消耗资源大
      堆内存:数据稳定(一旦建立,基本上直到程序结束才释放),分配/释放消耗资源大】
  • 静态区/常量区:不可变类型的参数【存放常驻内存的数据】
  • 数据区/方法区:函数/方法/类型…【加载代码对应的二进制数据】
    在计算机上运行demo01.py文件,先通过解释器项计算机申请内存,这里python解释器展568M,但分给python程序的却只有2M【】在这里插入图片描述

代码演示demo01

>>> x = 12
>>> y = 15
>>> z = x + y
>>>
>>> z
27
>>> m = 27
>>> m
27
>>> id(x)
140727564690608
>>> id(y)
140727564690704
>>> id(z)
140727564691088
>>> id(m)
140727564691088

在这里插入图片描述
代码演示demo02

def back(m):
    m.append('10')
def back2(n):
    n = 12
if __name__ == "__main__":
    a = [20]
    b = 20
    back(a) # ? 发生了什么
    back2(b) # ? 发生了什么

    print(a) # [20, '10']!? 什么结果  A[20, '10']? B[20]?  C['10']?
    print(b) # 20!? 什么结果  A20?  B12?  C2012?

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值