首页 > 解决方案 > 如何删除对象以增加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永久删除?

标签: pythonmemory-management

解决方案


使用 Python,您不应该关心内存管理。

Python 有一个出色的垃圾收集器,它为每个对象计算代码中的引用。
如果没有引用,则该对象将未被分配。

在您的情况下,如果在您使用完内存后内存没有空闲,则意味着该对象仍可以在您的程序中使用。如果你删除它然后尝试调用它,你会得到一个ReferenceError.

其他答案中有人建议使用del,但它只会删除变量名。

我的建议是确保您的代码实际上不再调用该对象,如果确实如此,请相应地操作您的数据(使用轻量级 db,将它们保存在本地硬盘驱动器上,...)并在需要时检索它们。如果你的大字典是一个仍在使用的类的类参数,但不再需要字典,你应该把这些字典放在类之外(也许引用一个只管理字典的新类)。在本问答中,您将找到优化内存使用的有用技巧。

你可以阅读这篇文章来深入了解 Python 的垃圾收集器


推荐阅读