Python解释器如何为不同的方法分配内存?
谁能告诉我Python解释器或PVM如何管理以下代码的内存Python解释器如何为不同的方法分配内存?,python,python-2.7,python-internals,Python,Python 2.7,Python Internals,谁能告诉我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):
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只使用堆?它们是何时存储的,运行时还是在运行时之前
例如,我在初始化此类后运行以下代码:
a = A()
a.getParams()
A.getPurpose()
A.printout()
Python解释器如何分配代码背后的内存 您的示例中的所有内容都只是一个对象。所有对象都在堆上 类对象是在运行时创建的,并且具有从属性名称到对象的映射,其中在类主体中定义的所有名称都只是属性。这些对象中的大多数实现了异常,异常是class_purpose属性。构成大多数属性的函数对象也在运行时创建;编译器生成的所有代码对象都存储字节码,一些常量是由代码创建的不可变的,包括嵌套作用域的更多代码对象 有关这些对象如何相互关联的详细信息,请参见 绝大多数Python开发人员不必担心内存管理。如果您针对开发,您可能需要阅读,其中确实说明: 理解Python堆的管理是由解释器本身执行的,并且用户对它没有控制权,这一点很重要,即使她定期操纵指向堆内内存块的对象指针。Python内存管理器通过本文档中列出的Python/capi函数根据需要为Python对象和其他内部缓冲区分配堆空间
示例中的所有内容都只是一个对象。所有对象都在堆上 类对象是在运行时创建的,并且具有从属性名称到对象的映射,其中在类主体中定义的所有名称都只是属性。这些对象中的大多数实现了异常,异常是class_purpose属性。构成大多数属性的函数对象也在运行时创建;编译器生成的所有代码对象都存储字节码,一些常量是由代码创建的不可变的,包括嵌套作用域的更多代码对象 有关这些对象如何相互关联的详细信息,请参见 绝大多数Python开发人员不必担心内存管理。如果您针对开发,您可能需要阅读,其中确实说明: 理解Python堆的管理是由解释器本身执行的,并且用户对它没有控制权,这一点很重要,即使她定期操纵指向堆内内存块的对象指针。Python内存管理器通过本文档中列出的Python/capi函数根据需要为Python对象和其他内部缓冲区分配堆空间
CPython倾向于只使用堆,可能是独占的,但这不是语言规范的要求。你不应该假设它也不重要。因为你来自C++,并且可以读取C,你可能想看看Python源程序来了解事物是如何工作的。例如,谢谢。这是一个好建议。我将阅读CPython代码以了解更多信息。因为理解CPython并不容易,所以需要一段时间才能抓住核心。关于CPython的解释,你有什么书推荐吗?没有,因为CPython都是“实现细节”,除了源代码本身之外,没有其他很好的文档。阅读关于第一个的内容可能会有所帮助,因为它提供了一些内部的更高层次的视图。CPython倾向于只使用堆,可能是独占的,但这不是语言规范的要求。你不应该假设它也不重要。因为你来自C++,并且可以读取C,你可能想看看Python源程序来了解事物是如何工作的。例如,谢谢。这是一个好建议。我将阅读CPython代码以了解更多信息。因为理解CPython并不容易,所以需要一段时间才能抓住核心。关于CPython的解释,你有什么书推荐吗?没有,因为CPython都是“实现细节”,除了源代码本身之外,没有其他很好的文档。阅读第一篇文章可能会有所帮助,因为它提供了一些更高层次的内部视图。