博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记10(Python的内存管理)
阅读量:6944 次
发布时间:2019-06-27

本文共 1507 字,大约阅读时间需要 5 分钟。

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

32. Python的内存管理

 1. 对象的内存使用

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

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

a=1b=1print(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 getrefcounta = [1, 2, 3]b = aprint(getrefcount(b))del aprint(getrefcount(b)) 

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

不懂

4.Python的垃圾回收

garbage collection 将没用的对象清除。

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

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

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

import gcprint(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的一些对象。

遍历。。。。

 

posted on
2016-05-11 14:35 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/skyEva/p/5481800.html

你可能感兴趣的文章
Chapter 1 -- UsingAndAvoidingNull
查看>>
HTTP 500 - 内部服务器错误
查看>>
马婕 2014年MBA,mpacc备考 报刊宣读2 美国对互联网的控制威胁着网络自由(转)
查看>>
Matlab之视角旋转函数[转]
查看>>
深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用[转载]...
查看>>
[12] 扇形体(Fan)图形的生成算法
查看>>
一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
查看>>
asp.net中GridView传多个值到其它页面的方法
查看>>
.NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)...
查看>>
join
查看>>
WrapPanel流布局的一个简单例子
查看>>
MYSQL多实例配置与使用教程
查看>>
3.4 spring- lookup-method 子元素的使用与解析
查看>>
UVA 350 Pseudo-Random Numbers
查看>>
打回来
查看>>
iOS7滑动返回
查看>>
《图形学》实验六:中点Bresenham算法画圆
查看>>
ruby里面module和class的区别
查看>>
[ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
查看>>
vc++加载透明png图片方法-GDI+和CImage两种
查看>>