如何在Python中为变量分配内存?

tpm*_*900 0 python binding memory-management

例如,我有以下Python代码:

>>> x = 9.89
Run Code Online (Sandbox Code Playgroud)

现在,我知道类型将在运行时动态确定为浮动,但是我不确定如何分配内存。确定类型后,是否会动态分配用于float大小的内存?分配的内存量是否总是相同?

use*_*ica 5

这将全部是CPython实现的细节。其他实现的行为可能有所不同。

变量的内存分配完全独立于它们所引用的对象类型。无论您分配x = []x = 5或者x = SomeCrazyHugeThing(),该值不会影响分配内存x。输入函数调用时,局部变量PyObject *在Python堆栈框架中分配为f_localsplus;其他变量dict在首次分配时作为相应名称空间字典中的条目“分配” 。(疯狂的元类和exec恶作剧可以怪异的方式改变这一点,但是我们不打算讨论这一点。)

那是变量。对象float例如9.89表达式在示例代码中求值的实例)的分配方式不同。每种类型都负责在创建该类型的实例时分配内存,并在对象增长,缩小或破坏时根据需要重新分配或取消分配内存。完成的方式取决于类型。

请注意,创建对象的时间可能令人惊讶。例如,在中x = 9.89,Python会float在编译该语句的字节码时创建一个对象(并为其分配内存)。在字节码执行过程中,Python只是检索现有的float;没有float分配新的。

  • 如果任何人对此表示反对,那么肯定会很好地表明他们为什么认为这是错误的。 (4认同)