为了账号安全,请及时绑定邮箱和手机立即绑定

Python是否有堆栈/堆,并且如何管理内存?

Python是否有堆栈/堆,并且如何管理内存?

墨色风雨 2019-10-15 09:48:08
如何在Python中管理变量和内存?它有堆栈和堆吗?使用什么算法来管理内存?有了这些知识,对于大量/数据处理的内存管理有什么建议吗?
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

如何在Python中管理变量和内存。


自动地!不,真的,您只是创建一个对象,Python虚拟机将处理所需的内存以及将其放置在内存布局中的位置。


它有堆栈和堆吗?使用什么算法来管理内存?


当我们谈论CPython它时,使用私有堆来存储对象。从CPython C API文档中:


Python中的内存管理涉及一个包含所有Python对象和数据结构的私有堆。此私有堆的管理由Python内存管理器在内部确保。Python内存管理器具有不同的组件,这些组件处理各种动态存储管理方面的问题,例如共享,分段,预分配或缓存。


内存回收主要通过引用计数来处理。也就是说,Python VM保留一个内部日志,记录有多少引用引用了一个对象,并且在没有更多引用引用该对象时自动对其进行垃圾回收。此外,还有一种机制可以通过检测对象的“孤岛” 来中断循环引用(引用计数无法处理),这与尝试查找所有可到达对象的传统GC算法有些相反。


注意:请记住,此信息是CPython特定的。其他Python实现,比如pypy,iron python,jython当谈到自己的实现细节和其他人可能来自彼此之间以及与CPython的不同。为了更好地理解它,可能有助于理解Python的语义(语言)和底层实现之间存在差异


有了这些知识,对于大量/数据处理的内存管理有什么建议吗?


现在我不能谈论这个,但是我确定NumPy(最流行的用于数字运算的python库)具有可以优雅地处理内存消耗的机制。


查看完整回答
反对 回复 2019-10-15
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

Python没有任何这样的东西。


Python是该语言,并且未指定实现必须如何准确实现 Python语言所定义的语义。


每个实现(CPython,PyPy,IronPython,Stackless,Jython ...)都可以自由地做自己的事情!


在C Python中,所有对象都驻留在堆中:


Python中的内存管理涉及一个包含所有Python对象和数据结构的私有堆。1个


CPython虚拟机是基于堆栈的:


>>> def g():

    x = 1

    y = 2

    return f(x, y)


>>> import dis

>>> dis.dis(g)

  2           0 LOAD_CONST           1 (1) # Push 1 onto the stack

              3 STORE_FAST           0 (x) # Stores top of stack into local var x


  3           6 LOAD_CONST           2 (2) # Push 2 onto stack

              9 STORE_FAST           1 (y) # Store TOS into local var y


  4          12 LOAD_GLOBAL          0 (f) # Push f onto stack

             15 LOAD_FAST            0 (x) # Push x onto stack

             18 LOAD_FAST            1 (y) # Push y onto stack

             21 CALL_FUNCTION        2     # Execute function with 2 

                                           # f's return value is pushed on stack

             24 RETURN_VALUE               # Return TOS to caller (result of f)

请记住,这是CPython特有的。尽管堆栈不包含实际值,但它保留了对那些对象的引用。


查看完整回答
反对 回复 2019-10-15
  • 2 回答
  • 0 关注
  • 1885 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信