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

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. WF4.0 工作流设计器 传入参数问题记录?

    在本公司的流程设计器 ,如果流程中使用了传入参数,应先定义 参数,然后再拖动节点,才能正确提交,否则出错,原因未查明,只观察到现象.

  2. 使用gogs,drone搭建自动部署

    使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎D ...

  3. Linux shell实战(ipcs工具)

    #!/bin/bash -o $# -gt ] then echo "参数个数不正确!" exit - fi WHOAIM=`whoami` function release { ...

  4. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  5. 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装

    本文章首发于浩瀚先森博客,地址: http://www.guohao1206.com/2016/08/23/967.html samba时一款为了实现linux系统中的文件能在windows系统中正常 ...

  6. typedef 和define的区别

    总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...

  7. Qt 学习笔记 TreeWidget 增删改

    在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer 布局如图 给树添加元素节点的方法和实现 .h文件 QTreeWidgetItem * AddT ...

  8. Webwork 学习之路【02】前端OGNL试练

    1.OGNL 出现的意义 在mvc中,数据是在各个层次之间进行流转是一个不争的事实.而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的: a. 数据在页面上是一个扁 ...

  9. C/C++实践笔记_002编译和链接

    1.要卡死程序用异步,同步的话开一个就关一个值为非0死循环.预处理优先于编译,别称预编译main函数死循环2.程序总是从main函数开始执行的C语言本身不提供输入输出语句print等来自于stdio库 ...

  10. .NET CLR 运行原理

    原文: Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects 文章讨论了: SystemDoma ...