python - Python Enumerate:是使用后释放的枚举对象吗?
问题描述
我最近发现 enumerate 可以更容易地识别索引和值。但是,我注意到一个奇怪的用法。如果您声明一个枚举对象并以任何方式使用它,则该对象内部的数据随后就会消失。
这里发生了什么?
在一个简单的示例中,您声明一个带有枚举列表的对象。您将其转换回列表一次。在第二次尝试时,它是空的。
A = [1, 2, 3, 4]
enuObject = enumerate(A)
>>> list(enuObject)
[(0, 1), (1, 2), (2, 3), (3, 4)]
>>> list(enuObject)
[]
当我在循环之外声明枚举调用时,我注意到了这一点。
解决方案
该enumerate
对象是一个迭代器,当垃圾收集器发现它不再被使用时将被释放。但是,在此示例中,函数enumerate
完全使用了的迭代器list
。这与以下内容非常相似:
items = []
for e in en:
items.append(e)
return items
它从枚举对象中获取每个元素en
,将它们添加到列表中,然后在没有任何项目时返回列表。因此,如果您list
再次调用完全使用的枚举对象,for e in en
则不会有任何项目要添加到列表中,因此它只会返回一个空列表。
推荐阅读
- c# - 提高 Blazor .NET 5.0 中许多子组件(Quill JS 富文本编辑器)的性能?
- javascript - 让最基本的 ajax 在 Windows 7 上的 xampp 上工作以检查互联网连接
- c# - DocuSign API:在同一个信封中发送多个文档的签名问题
- node.js - 尝试使用 GitHub 项目时出现 ERR
- python - 模板语法错误:无法传递余数
- linux - 创建 Conda 环境状态失败:143
- jquery - 在 Angular 9 项目中使用没有 JQuery 的 Bootstrap 4
- python - 我的 python 显示此错误:启动器中的致命错误 [WinError 5] 因为我重命名了我的用户文件夹名称
- javascript - 当变量达到特定值时向所有客户端发出
- html - Rails在body标签内渲染导航栏