【发布时间】:2016-08-15 07:57:16
【问题描述】:
谁能告诉我 Python 解释器或 PVM 如何管理以下代码的内存?
class A(object):
class_purpose = "template"
def __init__(self):
self.a = 0.0
self.b = 0.0
def getParams(self):
return self.a, self.b
@classmethod
def getPurpose(cls):
return cls.class_purpose
@staticmethod
def printout():
print "This is class A"
当我保存这个类并运行一些与这个类相关的代码时,PVM 或 Python 解释器如何存储类变量、类/静态函数和实例变量?我曾经是一名 C++ 程序员。我想知道那些“东西”存储在哪里(我知道 Python 只使用堆)?它们是何时存储的,RunTime 还是在 RunTime 之前?
比如我在初始化这个类之后运行这段代码:
a = A()
a.getParams()
A.getPurpose()
A.printout()
Python 解释器如何在这段代码后面分配内存?
【问题讨论】:
-
CPython 倾向于只使用堆(可能只使用堆),但这不是语言规范要求。你不应该假设它(也不应该重要)。
-
由于您来自 C++ 并且可以阅读 C,因此您可能需要查看 Python 源代码以了解其工作原理。例如the byte code interpreter.
-
@poke 谢谢。这是一个很好的建议。我将阅读 CPython 代码以了解更多信息。由于 CPython 不是很容易理解,所以需要一段时间才能抓住核心。你有什么关于 CPython 解释的书推荐吗?
-
并非如此,因为 CPython 都是“实现细节”,除了源代码本身之外,没有真正好的文档。首先阅读有关C API 的内容可能会有所帮助,因为这可以让您更深入地了解一些内部结构。
标签: python python-2.7 python-internals