python - 在python for循环中删除变量是否会提高内存效率?
问题描述
假设我有一个变量,我将在其中循环使用 1000 次,这样:
A = [3,4,5,6]
for i in range(1000):
# if something
# c = <a list which length depends on runtime>
A = c
del c
单循环后删除 c 会使内存消耗更有效吗?
解决方案
一般来说,没有。它没有。
del
从命名空间中删除名称,而不是对象。
当然,如果你删除一个引用,并且引用计数达到 0,那么该对象将被回收(在 CPython 中立即)。
但是请注意,在上面的循环中,无论如何您都创建了另一个引用,A = c
所以它绝对没有帮助。
在一种情况下,这可能是有益的,假设您在全局范围内执行此操作,例如在模块级别,而不是在函数中。因为 python for 循环不创建自己的范围,c
现在保留在全局命名空间中,并且可能会保持一个巨大的列表活动,直到程序结束。
这通常可以通过将程序更好地组织成模块化函数来更好地解决,并且只在全局范围内创建对您希望在程序结束之前存在的对象的引用。但是,有时,您最终会执行这样的循环,在这种情况下,显式删除最后一个引用确实有帮助(但同样,既然您这样做了A = c
,那么它无论如何也无济于事)。
我觉得您对 Python 变量的工作方式存在根本性的误解。我赞同评论中的建议:
推荐阅读
- group-by - 如何在 SAS 中对列进行分组,类似于数据透视表
- sql - Azure 应用服务 (ASE) SQL Azure 连接
- python - MLFlow 项目找不到 conda 可执行文件
- data-structures - 为什么在未排序数组中实现的优先级队列中的 Find-Minimum 操作只需要复杂度 = O(1) ?
- visual-studio-code - 有没有办法将 VS Code 片段文件放在非标准文件夹中并让 VS Code 使用它?
- configuration - 无法通过 carbon.xml 进行配置
- python - 为了创建字典,这些函数在做什么?
- c# - 如何进行并行数据库调用并绑定到模型 ASP.NET Core MVC
- unity3d - HoloLens 配套地图
- angular - 动态组件可以在表单中用作表单字段并且验证仍由父组件处理吗?