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

Python内存管理机制

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

Python内存管理机制

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

《python源码剖析》笔记 pythonm内存管理机制

1.内存管理架构 Python的内存管理机制都有两套实现:debug模式和release模式 Python内存管理机制的层次结构: 图16-1 第0层是操作系统提供的内存管理接口,如malloc、fr...
  • zhsenl
  • zhsenl
  • 2014年07月08日 15:17
  • 1507

Python学习之路——内存管理

一个Python小白的学习之路

C、python 、java内存管理区别

一、C 一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆区(...

Python内存管理说明

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

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

本节要点: 1. 数据类型 2. 内存管理 3. 深浅copy

Python 的内存管理

Python 采用了以下几种方式进行内存管理和优化: 1. 内存池 2. 引用

python的内存管理机制

先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python的内存管理
举报原因:
原因补充:

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