python的内存管理

原创 2015年11月19日 20:45:04

python中的内存管理是通过引用计数垃圾回收模块实现。

  • 一般情况下python在堆中new出来的对象都是通过引用计数来管理的,当引用计数为0的时候,就会立即通过tp_dealloc方法释放对象。注意这里是tp_dealloc而不是free。因为很多对象都会有缓存机制,比如new出来的int对象在释放的时候都会放回到free_list中,而不是将int对象所占用的内存free调了,还给系统。

  • 但是引用计数管理没法回收两个相互引用的对象,因为他们的引用计数永远都不会为零,所以垃圾回收模块(GC)就是用来打破对象之间相互引用的循环。被GC模块管理的对象都是container对象,因为只有container对象才能有对其他对象的引用,才会发生对象相互引用的问题。比如list, dict, tuple。
    container对象在堆上被new出来的时候通过通过_PyObject_GC_Malloc这个接口实现的,主要是为了都能把这些对象通过双向链表管理起来,在对象被销毁的时候通过_PyObject_GC_UNTRACK接口将对象从链表中摘除。

在GC模块中还有一个份代收集的问题,好啦,这个在书里讲的更清楚点,还是看书吧。

关于内存管理的python代码风格:
在代码中慎用__del__方法,因为GC模块无法回收有__del__方法的对象,因为python无法保证他们能安全的被回收。所以你要保证这个对象能通过引用计数的方式完成对象的回收动作,但是谁知道呢,总会有不小心的时候。

如果不使用__del__方法,但是有些动作想在对象被销毁的时候搞一把,怎么办。可以通过weakref来实现这个操作。这个后面写吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python 一切皆对象

python 一切皆对象在python中有一句话“一切皆对象”,其实在刚开始接触python的时候对这句话完全不理解,即使是看完了python基础教程也没有很好的理解这句话的含义。直到看了python...

Python的构造函数和析构函数 对象的变量和类的变量不一样

1.Python像其他的OOP语言一样在类里面会有构造和析构函数... 类似于PHP的, 构造和析构函数并不需要显式的写出来...他们只是在这个对象生成和销毁的时候才会被调用.. 如果显式的定义了,那...

python编程中的if __name__ == 'main': 的作用和原理

出处:http://www.dengfeilong.com/post/60.html   在大多数编排得好一点的脚本或者程序里面都有这段if __name__ == 'main': ,虽...

Python的内存管理机制.pdf

  • 2010-05-29 10:31
  • 865KB
  • 下载

Python内存管理说明

#coding=utf8 ''' 变量和内存管理细节: 1、变量无须事先声明 2、变量无须指定类型 3、程序员不用关心内存管理 4、变量名会被"回收" 5、del语句能够直接释放资源 ''' from...

Python内存管理机制

Python内存管理机制Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 引用计数举个例子说明引用是什么:a = 1如上为一个简单的赋值语句,1就是对象,a就是引...

Python内存管理机制

一、python内存 因为要调用while循环,循环内有temp变量,不清楚python是否会在每一轮循环结束后自动释放temp内存空间,做了一个内存测试,发现无论temp = none,还是del ...
  • ztf312
  • ztf312
  • 2015-08-27 11:21
  • 1061

Python学习之路——内存管理

一个Python小白的学习之路

Python的内存管理

语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的...

python基础之一——数据类型和内存管理

本节要点: 1. 数据类型 2. 内存管理 3. 深浅copy
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)