• 技术文章 >常见问题 >Python常见问题

    python的内存是如何管理的?

    silencementsilencement2019-09-23 10:16:30原创3060

    初学python的小伙伴一定会有这样的困惑,python中是如何进行内存管理的?如何进行垃圾清理的?本篇文章说一下这个问题,希望对学习python的小伙伴有帮助。

    首先就不得不提到Python解释器在何种情况下会释放变量的内存。Python引用了内存计数这一简单的计数来控制。

    下面是引用计数的知识:

    1) 增加引用计数 当对象被创建并(将其引用)赋值给变量时,该对象的引用计数被设置为1。

    对象的引用计数增加的情况:

    对象被创建:x = 3.14

    另外的别名被创建:y = x

    被作为参数传递给函数(新的本地引用):foobar(x)

    成为容器对象的一个元素:myList = [123, x, 'xyz']

    2) 减少引用计数 对象的引用计数减少的情况:

    一个本地引用离开了其作用范围。如foobar()函数结束时

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

    对象的一个别名被赋值给其他对象:x = 123

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

    窗口对象本身被销毁:del myList

    (更多学习内容,请点击python学习网

    3) del语句 Del语句会删除对象的一个引用,它的语法如下:del obj[, obj2[, ...objN]]

    例如,在上例中执行del y会产生两个结果:

    从现在的名称空间中删除y

    x的引用计数减1

    下面我们来试验一下

    import sys
     
    x = 3.14
    print("原始引用值:", sys.getrefcount(x))
    y = x
    print("被y引用后:", sys.getrefcount(x))
     
    x = 4.0
    print("重新赋值后:", sys.getrefcount(x))
     
    del y
    print("删除y引用后:", sys.getrefcount(x))
    原始引用值: 3
    被y引用后: 4
    重新赋值后: 3
    删除y引用后: 3

    当一个变量的引用计数为0的时候,就会被解释器回收。当然在交互模式下,内存不会马上释放,重新启动解释器就会释放了。

    专题推荐:内存管理
    上一篇:python中使用raw input失败的原因 下一篇:python的os模块怎么用

    相关文章推荐

    • Python中整型对象是如何在内存中存储的?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网