Python学习之路——内存管理
2015-03-16 18:27
316 查看
1 变量定义
在Python中,变量定义不像C/C++等语言需要显式声明语句,变量在第一次赋值时自动声明。但和C/C++等语言相同的是:变量只有被创建和赋值后才能被使用。变量一旦被赋值,你就可以通过变量名来访问她。
>>> x = 4 >>> y = 'test string' >>> x 4 >>> y 'test string' >>>
2 动态类型
Python中不但变量名无需事先声明,而且也无需类型声明。在Python语言中,对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码,Python仍然是一种解释型语言。创建对象时,解释器会根据语法和右侧的操作数来决定新对象的类型,在对象创建后(也就是变量赋值),一个该对象的引用会被赋值给左侧的变量。3 内存分配
Python解释器承担了内存管理的复杂任务,程序员只需要关心要解决的问题,底层的事放心交给Python解释器就行。(真是个好消息)4 引用计数
Python解释器是如何管理内存的,它是依据什么来决定是否回收这个对象?Python使用了引用计数这一简单技术。Python内部记录着所有使用中的对象各有多少个引用。一个内部跟踪变量,称为一个引用计数器。每个对象各有多少个引用,简称引用计数。当对象被创建时,就创建了一个引用计数,但这个对象不再使用,这个对象的引用计数变为0时,他就被当作垃圾回收。4.1 增加引用计数
当对象被创建并(将其引用)赋值给变量, 该对象的引用计数就被设置为1。当同一个对象的引用又被赋值给其他变量,或作为参数传递给函数、类实例时,或赋值给一个容器对象的成员时,该对象的一个新的引用,就会被创建,该对象的引用计数自动加1.
4.2 减少引用计数
一个对象的引用计数在以下情况下会减少:一个本地引用离开了其作用范围,例如函数结束了。
对象的一个引用被显式删除
del y # y为变量
对象的一个引用被赋值给其他对象
x = 123
x = 456(对象123的引用计数减1, 456的引用计数加1)
对象从容器对象移除
aList.remove(x)
容器对象被销毁
del aList
4.3 del 语句
del语句会删除对象的一个引用,它的语法如下:del obj
5 垃圾收集
不再使用的内存会被一种称为垃圾收集的机制释放。解释器负责跟踪对象的引用计数,而垃圾收集器负责释放内存。垃圾收集器是一块独立代码,它用来寻找引用计数为0的对象,它也负责检查那些虽然引用计数大于0但也应该被销毁的对象。相关文章推荐
- python学习之路--内存管理
- python学习之路 五:函数式编程
- 王亟亟的Python学习之路(10)-匿名函数
- python学习之路-1 python基础操作
- python学习之路-内置函数
- 【小白笔记】python web学习之路-Flask(1)
- 王亟亟的Python学习之路(四)-循环,条件,Range,list和tuple
- Python学习之路(仅供学习py的学者复习回顾)
- 【Python学习之路】My Third journey
- Python学习之路14——列表
- python 学习之路(字符串的常用操作)
- python学习之路-4 内置函数和装饰器
- Python 学习之路(二)
- Python之路,Day6 - 面向对象学习
- python学习之路三(文件读写)
- Python学习之路【第三篇】--集合
- python学习之路
- 我的Python学习之路之基本语法-函数
- 我的python学习之路----语法
- python学习之路19-文件IO