猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
Python是否有堆栈/堆,并且如何管理内存?
如何在Python中管理变量和内存?它有堆栈和堆吗?使用什么算法来管理内存?有了这些知识,对于大量/数据处理的内存管理有什么建议吗?
墨色风雨
浏览 1886
回答 2
2回答
白猪掌柜的
如何在Python中管理变量和内存。自动地!不,真的,您只是创建一个对象,Python虚拟机将处理所需的内存以及将其放置在内存布局中的位置。它有堆栈和堆吗?使用什么算法来管理内存?当我们谈论CPython它时,使用私有堆来存储对象。从CPython C API文档中:Python中的内存管理涉及一个包含所有Python对象和数据结构的私有堆。此私有堆的管理由Python内存管理器在内部确保。Python内存管理器具有不同的组件,这些组件处理各种动态存储管理方面的问题,例如共享,分段,预分配或缓存。内存回收主要通过引用计数来处理。也就是说,Python VM保留一个内部日志,记录有多少引用引用了一个对象,并且在没有更多引用引用该对象时自动对其进行垃圾回收。此外,还有一种机制可以通过检测对象的“孤岛” 来中断循环引用(引用计数无法处理),这与尝试查找所有可到达对象的传统GC算法有些相反。注意:请记住,此信息是CPython特定的。其他Python实现,比如pypy,iron python,jython当谈到自己的实现细节和其他人可能来自彼此之间以及与CPython的不同。为了更好地理解它,可能有助于理解Python的语义(语言)和底层实现之间存在差异有了这些知识,对于大量/数据处理的内存管理有什么建议吗?现在我不能谈论这个,但是我确定NumPy(最流行的用于数字运算的python库)具有可以优雅地处理内存消耗的机制。
0
0
0
慕侠2389804
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特有的。尽管堆栈不包含实际值,但它保留了对那些对象的引用。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Python
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续