首页 > 解决方案 > Python Enumerate:是使用后释放的枚举对象吗?

问题描述

我最近发现 enumerate 可以更容易地识别索引和值。但是,我注意到一个奇怪的用法。如果您声明一个枚举对象并以任何方式使用它,则该对象内部的数据随后就会消失。

这里发生了什么?

在一个简单的示例中,您声明一个带有枚举列表的对象。您将其转换回列表一次。在第二次尝试时,它是空的。

A = [1, 2, 3, 4]
enuObject = enumerate(A)
>>> list(enuObject)
[(0, 1), (1, 2), (2, 3), (3, 4)]
>>> list(enuObject)
[]

当我在循环之外声明枚举调用时,我注意到了这一点。

标签: pythonenumerate

解决方案


enumerate对象是一个迭代器,当垃圾收集器发现它不再被使用时将被释放。但是,在此示例中,函数enumerate完全使用了的迭代器list。这与以下内容非常相似:

items = []
for e in en:
    items.append(e)

return items

它从枚举对象中获取每个元素en,将它们添加到列表中,然后在没有任何项目时返回列表。因此,如果您list再次调用完全使用的枚举对象,for e in en则不会有任何项目要添加到列表中,因此它只会返回一个空列表。


推荐阅读