用这张图激励一下自己,身边也就只有一位全栈数据工程师!!!

32. Python的内存管理

1. 对象的内存使用

对于整型和短字符串对象,一般内存中只有一个存储,多次引用。其他的长字符串和其他对象,对象就有相同的多份存储。

查看对象的内存存储,可以用内置函数id().比如:

a=1
b=1
print(id(a), id(b)) # 相同 a='a very good morning'
b='a very good morning'
print(id(a), id(b)) # 不相同

也可以用 is 关键字 来验证两个引用是否是同一个对象。 

a='a very good morning'
b='a very good morning'
print(a is b) # False

每个对象都有指向该对象的引用,可以用 sys包中的getrefcount(),来查看某个对象的引用计数。

注意:getrefcount()所得到的结果,会比期望的多1(因为引用作为参数传递给getrefcount()使用时,相当于创建了一个临时引用)。

2. 对象引用对象

Python的一个容器对象(container),比如表、词典等,可以包含多个对象。实际上,容器对象中包含的并不是元素对象本身,是指向各个元素对象的引用。

容器对象的引用可能构成复杂的拓扑结构,如引用环,增加垃圾回收的复杂性。

不甚理解,以后再看。http://www.cnblogs.com/vamei/p/3232088.html

globals()  可以查看记录了所有全局引用的字典。

locals()    可以查看记录了局部引用的字典。

引用环

3. 引用减少

del 删除某个引用:

from sys import getrefcount

a = [1, 2, 3]
b = a
print(getrefcount(b)) del a
print(getrefcount(b)) 

如果某个引用指向对象A,当这个引用被重新定向到某个其他对象B时,对象A的引用计数减少:

不懂

4.Python的垃圾回收

garbage collection 将没用的对象清除。

1)从基本原理上,当Python的某个对象的引用计数降为0时,那么该对象内存就会被清空。

2)Python只会在特定条件下,自动启动垃圾回收。

通过gc模块的get_threshold()方法,查看阈值:

import gc
print(gc.get_threshold()) #(700,10,10)

其中700就是阈值,代表分配对象(object allocation)和取消分配对象(object deallocation)的次数差值,高于某个阈值时,垃圾回收才会启动。

可以通过gc中的set_threshold()方法重新设置。

3)手动启动垃圾回收,即使用gc.collect()。

4)分代回收 generation     0,1,2

  • 所有的新建对象都是0代对象。
  • 当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象
  • 两个10的含义:每10次0代垃圾回收,会配合1次1代的垃圾回收;而每10次1代的垃圾回收,才会有1次的2代垃圾回收。

5. 孤立的引用环

引用环可能构成无法使用,但引用计数不为0的一些对象。

遍历。。。。

python学习笔记10(Python的内存管理)的更多相关文章

  1. python 学习笔记 10 -- 正則表達式

    零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...

  2. python 学习笔记 9 -- Python强大的自省简析

    1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...

  3. Python学习笔记 - day12 - Python操作NoSQL

    NoSQL(非关系型数据库) NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.用于超大规模数据的存储.(例如 ...

  4. python学习笔记(一):python简介和入门

    最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型 ...

  5. python学习笔记(python简史)

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum) 目前python主要应用领域: ·云计算 ·WEB开发 ·科学运算.人工智能 ·系统运维 ·金融:量化交 ...

  6. python学习笔记(1)--python特点

    python诞生于复杂的信息系统时代,是计算机时代演进的一种选择. python的特点,通用语言,脚本语言,跨平台语言.这门语言可以用于普适的计算,不局限于某一类应用,通用性是它的最大特点.pytho ...

  7. python 学习笔记一——Python安装和IDLE使用

    好吧,一直准备学点啥,前些日子也下好了一些python电子书,但之后又没影了.年龄大了,就是不爱学习了.那就现在开始吧. 安装python 3 Mac OS X会预装python 2,Linux的大多 ...

  8. 《objective-c基础教程》学习笔记(十)—— 内存管理

    本篇博文,将给大家介绍下再Objective-C中如何使用内存管理.一个程序运行的时候,如果不及时的释放没有用的空间内存.那么,程序会越来越臃肿,内存占用量会不断升高.我们在使用的时候,就会感觉很卡, ...

  9. python学习笔记之——python模块

    1.python模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...

随机推荐

  1. HTML 学习笔记 CSS样式(定位)

    CSS定位(Positioning)属性 允许你对元素进行定位. CSS定位和浮动 CSS为定位和浮动提供了一些属性,利用这些属性 可以建立列式布局,将布局的一部分与另一部分重叠.还可以完成多年来通常 ...

  2. javascript中String的fromCharCode()方法

    前几天遇到一个bug,后端的模板引擎在输出形如: <div title="111 aaa">内容</div> 这样的内容时,无法输出' '空格,所以只能用' ...

  3. CSS IE6/7/8, Firefox, Safari, Chrome, Opera Hack使用简要归纳(转)

    网上有很多关于IE6/7/8, Firefox, Safari, Chrome, Opera CSS Hack的文章,但我觉得太过繁杂,要不给出一张看也看不懂的CSS Hack归纳表,要不就是给出一大 ...

  4. ASP.NET MVC读取XML并使用ViewData显示

    看到网上一个网友问及,无法获取XML某一个节点内容.下面Insus.NET在ASP.NET MVC环境下实现它. 先把XML文件放入App_Data目录,当然你可以放在自建目录中.打开看看它有几层,几 ...

  5. office 2010 2013卸载工具

    http://www.ithome.com/html/soft/32777.htm Office 2003 || Office 2007 || Office 2010.

  6. java与c#的反射性能比较

    java与c#都支持反射,但是从网络上搜索两大阵营对于反射的态度,基本上.net开发人员都建议慎用反射,因为会有性能开销:反到是java阵营里好象在大量肆无忌惮的使用反射.于是写了下面的测试代码: c ...

  7. ios蓝牙开发(四)app作为外设被连接的实现-转发

    代码下载: 原博客中大部分示例代码都上传到了github,地址是:https://github.com/coolnameismy/demo. 再上一节说了app作为central连接periphera ...

  8. MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...

  9. 在Windows上将ReactNative集成到现有的Android项目

    React Natvie的官方文档的 Integrating with Existing Apps 已经很详细地教我们如何将React Natvie集成到现在的Android项目.我根据官方文档的步骤 ...

  10. [CF#250 Div.2 D]The Child and Zoo(并查集)

    题目:http://codeforces.com/problemset/problem/437/D 题意:有n个点,m条边的无向图,保证所有点都能互通,n,m<=10^5 每个点都有权值,每条边 ...