zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    职场篇:聚焦与复盘
    职场篇:直面情绪杀手【已补更】
    .NetCore实践篇:成功解决分布式监控ZipKin聚合依赖问题(三)
    职场篇:为何我们需要思想大洗礼?
    职场篇:从温水煮青蛙说起
    .NetCore实践篇:分布式监控系统zipkin踩坑之路(二)
    postman application/json;
    yapi 个人空间 这个分组的问题
    yapi 的分组的理解!
    yapi的安装
  • 原文地址:https://www.cnblogs.com/aveenzhou/p/2676179.html
Copyright © 2011-2022 走看看