栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

不同的类实例使用相同的内存位置

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不同的类实例使用相同的内存位置

您的问题与Python如何分配内存有关。 tldr; Python使用堆来存储内存。释放资源后,它会到达堆的顶部。

详细答案

Python必须分配内存来创建对象的实例。为了提高内存效率,Python内存管理器具有大量的内存位置,可用于为对象实例提供或保留对象。使用您的一些示例,您可以看到它在实践中是如何工作的。

例子1

>>> for i in range(3):...     print(DemoClass())... <test.DemoClass instance at 0x288b248><test.DemoClass instance at 0x288b248><test.DemoClass instance at 0x288b248>

for
循环的第一次迭代期间,python使用其当前堆中的第一个可用地址,即
<0x288b248>
DemoClass
为该
print
调用创建一个实例。一旦
print
命令完成,存储器地址被释放并返回到
堆的顶部 。在循环的下一次迭代中,python使用第一个可用的内存地址,该地址也是address
<0x288b248>
。等等。

范例#2

>>> for j in [DemoClass() for i in range(3)]:...     print(j)... <test.DemoClass instance at 0x288bcf8><test.DemoClass instance at 0x288b290><test.DemoClass instance at 0x288b638>

python在这里生成一个列表,然后将对其进行遍历。列表的创建要求为每个元素创建一个DemoClass的
实例。这将从堆中删除前三个地址。循环完成后,列表将从内存中释放出来,如果再次调用它,

print(DemoClass)
我们会发现python再次在重用内存。

>>> print DemoClass()<test.DemoClass instance at 0x288bcf8>

示例3(我的交替内存分配示例)

>>> for i in range(4):...     Demo = DemoClass()...     print(Demo)... <test.DemoClass instance at 0x288bcf8><test.DemoClass instance at 0x288b290><test.DemoClass instance at 0x288bcf8><test.DemoClass instance at 0x288b290>

在此示例中,每次

Demo
实例化为的实例时
DemoClass
,都将内存段分配给
Demo
。然而,调用
print(Demo)
不能
自由分配到内存
Demo
。在下一个循环的开始,将分配一个新的内存段,
Demo
然后
Demo
将其 覆盖
,这时它的原始内存地址将返回到堆的顶部。
Demo
然后用于的内存地址在两个内存地址之间交替。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号