python环境下的内存分析

版权声明:CSDN 博主刘康康 https://blog.csdn.net/liiukangkang/article/details/83063558

1.内存分析

python源代码[后缀名为.py的文本文件]
运行在解释器中,得到运算结果
问题:怎么运行的?

计算机运行一个程序
在这里插入图片描述
程序/软件的运行[核心机制]
源代码程序[语义化的定义了数据、流程等控制单元]
内存操作[加载内存->变量/函数/类型/方法…]
运算处理[执行运算的过程,需要提取数据执行运算(按照流程进行逻辑控制)]

既然所有的软件,都是这样运行的,直接运行就好!为什么还要分析运行过程中的内存?
因为需要在有限的硬件资源上,运行尽可能多的软件,需要有效的利用内存空间。
比如一台计算机硬件[内存|硬件|8G]
操作系统[系统软件]:控制和管理硬件操作,完成软件数据处理
使用硬件内存运行操作系统软件[2G已用|6G可用]
直接分配内存空间,操作使用内存数据
–>应用软件:执行各种业务相关的数据运算
–>每个软件运行,都需要内存]
–>向操作系统申请内存,操作系统给对应的软件分配内存
–>软件在申请到的内存中分配数据,加载数据、完成软件的执行

目标:软件的运行,需要将软件数据加载到内存中。

2.PYTHON中的内存处理

python程序是怎么运行的?
python需要一个开发/运行环境,开发好的python程序可以通过执行命令python 文件名 直接运行
核心:一个python程序要要运行,就需要向解释器申请运行的内存空间
为了提高程序执行效率有效的利用内存空间,将申请内存空间进行了区域划分

  1. 栈内存和堆内存
  2. 静态区/常量区
  3. 数据区/方法区
    在这里插入图片描述
    python交互模式下的代码演示
    在这里插入图片描述
    python交互模式下
    在这里插入图片描述

代码演示:

"""
Version 1.1.0
Author lkk
Email [email protected]
DESC TODO
"""

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?

内存运行分析
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liiukangkang/article/details/83063558