您的问题涉及Python如何分配内存. tldr; Python使用堆来存储内存.释放资源时,它将转到堆顶部.
详细解答
Python必须分配内存来创建对象的实例.为了提高内存效率,Python memory manager有一堆内存位置可用于为对象的实例化提供或保留.使用您的一些示例,您可以看到它在实践中如何工作.
示例#1
>>> for i in range(3):
... print DemoClass()
...
在for循环的第一次迭代期间,python使用其当前堆中的第一个可用地址,即< 0x288b248>,为打印调用创建DemoClass的实例.打印命令完成后,将释放内存地址并返回堆顶部.在循环的下一次迭代期间,python利用第一个可用的存储器地址,该地址也是地址< 0x288b248>.等等.
例#2
>>> for j in [DemoClass() for i in range(3)]:
... print j
...
这里python生成一个列表,然后迭代.创建列表需要为每个元素创建一个新的DemoClass实例.这将从堆中取出前三个地址.循环完成后,列表将从内存中释放,如果我们再次调用print(DemoClass),我们会发现python再次重用内存.
>>> print DemoClass()
示例3(我的交替内存分配示例)
>>> for i in xrange(4):
... Demo = DemoClass()
... print(Demo)
...
在此示例中,每次将Demo实例化为DemoClass的实例时,都会将一段内存分配给Demo.但是,打印调用(Demo)不会释放分配给Demo的内存.在下一个循环的开始,一个新的内存段被分配给Demo,然后Demo被覆盖,此时它的原始内存地址返回到堆的顶部.然后用于Demo的存储器地址在两个存储器地址之间交替.