Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解释器如何为不同的方法分配内存?_Python_Python 2.7_Python Internals - Fatal编程技术网

Python解释器如何为不同的方法分配内存?

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):

谁能告诉我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只使用堆?它们是何时存储的,运行时还是在运行时之前

例如,我在初始化此类后运行以下代码:

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都是“实现细节”,除了源代码本身之外,没有其他很好的文档。阅读第一篇文章可能会有所帮助,因为它提供了一些更高层次的内部视图。