python - 如何删除对象以增加python中的可用内存?
问题描述
我的 python 应用程序在启动期间从文件中读取数据并将这些数据存储在字典中(字典是数据读取器类的属性)。一旦应用程序启动并使用了读取的数据,就不再需要字典中的这些数据。但是,它们会消耗大量内存。如何删除这些字典以释放内存?
例如:
class DataReader():
def __init__(self, data_file):
self.data_file = data_file
def read_data_file_and_store_data_in_dictionary():
self.data_dictionary = {}
for [data_name, data] in self.data_file:
self.data_dictionary[data_name] = data
class Application():
def __init__(self, data_file):
self.data_reader = DataReader()
self.data_reader.read()
def start_app(self):
self.use_read_data()
应用程序启动后,self.data_dictionary
不再需要。如何self.data_dictionary
永久删除?
解决方案
使用 Python,您不应该关心内存管理。
Python 有一个出色的垃圾收集器,它为每个对象计算代码中的引用。
如果没有引用,则该对象将未被分配。
在您的情况下,如果在您使用完内存后内存没有空闲,则意味着该对象仍可以在您的程序中使用。如果你删除它然后尝试调用它,你会得到一个ReferenceError
.
其他答案中有人建议使用del
,但它只会删除变量名。
我的建议是确保您的代码实际上不再调用该对象,如果确实如此,请相应地操作您的数据(使用轻量级 db,将它们保存在本地硬盘驱动器上,...)并在需要时检索它们。如果你的大字典是一个仍在使用的类的类参数,但不再需要字典,你应该把这些字典放在类之外(也许引用一个只管理字典的新类)。在本问答中,您将找到优化内存使用的有用技巧。
你可以阅读这篇文章来深入了解 Python 的垃圾收集器
推荐阅读
- c# - 反序列化不适用于属性 $type,为什么?
- nginx - nginx proxy_next_upstream 工作很奇怪
- java - 使用父属性值对杰克逊进行多态反序列化
- ssh - 在 CentOS Google VM 实例上进行 yum 更新后无法 SSH
- javascript - 我不明白如何在 js 中返回变量。XMLHttpRequest()
- apache-spark - SparkException:Job 2 由于 SparkContext 已关闭而取消,Spark Yarn 处理大型数据集
- angular - 在 BehaviourSubject 订阅中获取未定义
- python - 未检测到 VS 代码 venv (WSL)
- c++ - 编译器无法为类错误生成默认构造函数
- c++ - 布尔表达式、访问者模式和.. 堆栈溢出