Python的内存管理
2011-05-27 14:29
204 查看
学习一门语言前,肯定是先学习这门语言的变量。要想深入了解这门语言,变量在内存中的管理尤其重要。
Python中变量的定义和声明是很随意的,你可以在任何你想要开始使用变量的时候去定义吧,这和C有区别。而且声明变量的时候无需指定变量类型,它的类型会在变量赋值的时候由Python内部的解释器确定。注意,Python变量也需要遵循先创建赋值之后才可以使用的原则。
作为一个优秀的程序,相信我们一定会仔细研究一门语言的变量在内存中是如何管理的,是否需要我们手动释放内存?很幸运的是,Python解释器已经帮我们解决了这个复杂的问题。那它是怎么做的什么时候回收那些对象呢?
Python引入了一个机制:引用计数。引用计数的意思就是说Python内部记录了对象有多少个引用。
变量x被创建赋值为4的时候,该对象的引用计数为1。当执行y=x语句的时候,变量y指向了跟变量x同一个对象,这时该对象的引用计数变成了2。
总结一下对象会在一下情况下引用计数加1:
1.对象被创建:x=4
2.另外的别人被创建:y=x
3.被作为参数传递给函数:foo(x)
4.作为容器对象的一个元素:a=[1,x,'33']
2.对象的别名被显式的销毁:del x ;或者del y
3.对象的一个别名被赋值给其他对象:x=789
4.对象从一个窗口对象中移除:myList.remove(x)
5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。
Python中变量的定义和声明是很随意的,你可以在任何你想要开始使用变量的时候去定义吧,这和C有区别。而且声明变量的时候无需指定变量类型,它的类型会在变量赋值的时候由Python内部的解释器确定。注意,Python变量也需要遵循先创建赋值之后才可以使用的原则。
作为一个优秀的程序,相信我们一定会仔细研究一门语言的变量在内存中是如何管理的,是否需要我们手动释放内存?很幸运的是,Python解释器已经帮我们解决了这个复杂的问题。那它是怎么做的什么时候回收那些对象呢?
Python引入了一个机制:引用计数。引用计数的意思就是说Python内部记录了对象有多少个引用。
引用计数增加情况
比如下面的语句:x=4 y=x
变量x被创建赋值为4的时候,该对象的引用计数为1。当执行y=x语句的时候,变量y指向了跟变量x同一个对象,这时该对象的引用计数变成了2。
总结一下对象会在一下情况下引用计数加1:
1.对象被创建:x=4
2.另外的别人被创建:y=x
3.被作为参数传递给函数:foo(x)
4.作为容器对象的一个元素:a=[1,x,'33']
引用计数减少情况
1.一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。2.对象的别名被显式的销毁:del x ;或者del y
3.对象的一个别名被赋值给其他对象:x=789
4.对象从一个窗口对象中移除:myList.remove(x)
5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。
垃圾回收
当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。相关文章推荐
- 从Python的源码浅要剖析Python的内存管理
- python的内存管理机制
- python如何进行内存管理
- python的内存管理
- **Python是如何进行内存管理的?
- Python学习之路——内存管理
- 【python】理解python里的赋值、引用、拷贝及作用域、内存管理、垃圾回收
- Python Study (06)内存管理GC
- Python深入06 Python的内存管理
- Python学习第六天----Linux内存管理、进程管理、RPM包安装管理及源码安装软件
- python的内存管理机制
- Python Study (06)内存管理GC
- Python内存管理结合源码 整理补充 (未完成)
- Python内存管理(二 arena和缓存池)
- python中的内存管理
- python学习之路--内存管理
- python 内存管理
- python的内存管理机制
- python内存管理
- Python深入06 Python的内存管理