关于python中 内存的处理与分析

内存处理

关于内存的处理与分析

[if !supportLists]1.    [endif]内存的分配

[if !supportLists]l  [endif]对象的创建,依赖于申请内存空间中数据的加载,对象在内存中的创建依赖于三部分

[if !supportLists]Ø  [endif]内存的处理:对象内存的地址、引用变量分配内岑的地址、对象和引用变量之间关联

由于对象的创建,是将堆内存中创建的对象地址临时存储在栈内存的变量中,那么在程序中如果要在多个地方使用一个对象就要通过开发者能熟悉的硬、软件对于内存的处理。

[if !supportLists]l  [endif]软件程序在计算机中执行,主要通过数据单元、控制单元、执行单元共同协作,完成数据的交互,达到程序处理数据的目的。所以在python程序在运行的时候,主要从解释器从系统申请内存空间以及运行python软件解释器手机爱能够申请的内存主要区分为这样几个部分

[if !supportLists]l  [endif]堆内存(heep)

[if !supportLists]l  [endif]栈内存区(Stack)

[if !supportLists]l  [endif]静态区|常量区(static)

[if !supportLists]l [endif]方法区|数据区(data)

[if !supportLists]l  [endif]不可变数据类型&可变数据类型

1.2:不可变数据类型:一般基本数据都是不可变类型eg: str  int 

1.3:可变数据类型:组合数据类型或自定义数据类eg: list   daic

怎么区分可变和不可变?为什么要有这样的规则?

Python中的一切对象,可以通过id()函数查寻对象在内存中地址数据

可变数据类型都是在定义了数据之后,修改变量的数据,内存地址不会发生变化

1.4:代码和代码块

 Python中的最小运行单元是代码块,代码块会独立申请内存

       1.5:python对内存的操作,社区开发一款比较强大的模块作为一个代码块向系统申

            请,关于memory_profie是一个使用较为简单,并且可视化比较直观的工具模块,通过pip 工具安装即可使用。

pip install memory_profiler

Form memory_profiler import profile

@profile

def chg_data_1():

x = 12

print(“method:{}”.format(x))




程序内存代码检测

代码is 、== 、isinstance使用

前面看过了变量以及对象在内存中的分配和执行情况,那么在程序执行过程中,怎么判断对象和对象之间的关系,Python 提供对象操作符号is 和内容操作符号== ,用于判断对象和对象的值的情况

引用浅拷贝、深拷贝

对象的浅拷贝

3.11对象的浅拷贝

对于程序中对象的拷贝操作,吃了前面介绍的引用赋值操作可以完成同一个对象在程序不同

位置的操作,这里的浅拷贝更是一个对象的临时备份,浅拷贝的核心机制主要是赋值对象内部数据的应用的引用。


对象的深拷贝

3.12 对象的深拷贝

和队象的浅拷贝不同,对象的深拷贝,是对象数据的直接拷贝,而不是简单引用拷贝,主要是通过python 内建表模块copy提供deepcopy函数可以对象深拷贝


Python中垃圾回收机制

引用计数

引用计数(Reference Counting  RC)是python 中的垃圾回收机制的核心操作算法

该算法最早在1960年首次提出,并在大部分高级语言中沿用至今,是很高级语言的垃圾核心算法之一。

引用计数算法的核心思想是:当一个对象被创建或者拷贝时,引用计数就会+1,当这个对象

的多个引用变量,被销毁一个时该对象的引用计数就会—1,如果一个对象的引用计数为则表示该对象已经不被引用,就可以让垃圾回收机制进行清除释放该对象战友的内存空间了

标记清除

Python 中的标记-清除机制主要针对可能产生循环引用的对象进行的检测

在python 中的基本不可变类型如 pyintobject ,pystringobject 等对象的内部不会内聚其他

内聚其他对象的引用,所以不会产生循环引用,一般情况下循环引用总是发生在其他可变对象的内部属性中,如list dict  class等待,使得该方法消耗的资源和程序中可变对象的数量息息相关!


分代回收

Python 中的分代是一种空间换取时间效率的做法,python内部处理的机制定义了三个不同的链表数据结构,在程序中对象往往的更快,年老的对象往往存活更久

������&�q��c

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,802评论 0 27
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,460评论 1 45
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 482评论 0 0
  • “天一大联考”,我不用监考,上午爱人陪我去好朋友吴峰家一趟,下午又陪我一起包饺子。一起看啦个电影《洋妞...
    纶纶妈阅读 140评论 0 0
  • 说点真格的 【美】约翰·阿什贝利 陈子弘 译 我们要你出去去加入哄笑的队伍,但是啊,那需要技艺娴熟泛泛而论的高超骑...
    陈子弘阅读 909评论 0 7