python实例化类的存储内存地址_python – 不同的类实例使用相同的内存位置

您的问题涉及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的存储器地址在两个存储器地址之间交替.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值