Python内存管理机制

python内部使用引用计数,来保持追踪内存中的对象,python内部记录着所有使用中的对象各多少引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。

引用计数增加的情况:

1.对象被创建,即将一个对象赋给一个变量时(变量实际就是对象的一个名字,右边的是一个对象)

x=3.14

2.或另外的别名被创建

y=x

3.作为参数传递给函数(新的本地引用)

foo(x)

4.成为容器对象的一个元素

lst=[12,"x",x]

引用计数减少的情况:

1。当变量被赋值给另外一个对象,原对象的引用计数也会自动减1

foo="as"

bar=foo

foo=123

2.一个本地引用离开了其作用范围,如foo(x)函数结束

3.对象的一个别名被赋值给其它的对象

4.对象的别名被显式的销毁 del y

5.对象被从一个窗口对象中移除 lst.remove(x)

6.窗口对象本被销毁 del lst

x=1

y=x

(del 从现在的名字空间中删除y,x的引用计数减1)

不会被使用的内存会被垃圾收集机制释放掉

垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)

 

python中实现内存泄露的技术

class A(object):

  def __init__(self):

    print "%S born" % id(self)

  def __del__(self):

    print "delete %s" % id(self)

class B(object):

  def __init__(self):

    print "%S born" % id(self)

  def __del__(self):

    print "delete %s" % id(self)

a=A()

b=B()

a.B=b

b.A=a

del a

del b

 

 

 

 

posted @ 2012-09-08 01:05  Aveen  阅读(277)  评论(0编辑  收藏  举报
Top