gpt4 book ai didi

python - 在python中设计自定义库时如何正确优化内存管理?

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:15 26 4
gpt4 key购买 nike

我正在用 Python 2.7 创建一个库。因为我要像这样多次调用这个库(和其他类似的库),所以我需要确保我没有创建一堆对象(比如下面的 gm)当不再需要它们时,它们最终会浪费内存。

但是,我有点困惑,因为在我的代码中,gm 对象仍然存在于 with 之外:

import mylib
with mylib.GeneralMethods() as gm:
print gm.say_hello()
>>> hello world

print gm # this is no longer needed, but still exists...
>>> <mylib.GeneralMethods object at 0x10f9c5bd0>

在设计和调用我的库时,我可以做些什么来进一步优化内存管理?我不想让杂散对象占用内存,例如 gm

现在,这就是我的图书馆的样子(大大简化):

class GeneralMethods(object):
def __init__(self, parent=None):
super(GeneralMethods, self).__init__()

def __enter__(self):
return self

def __exit__(self, type, value, traceback):
return isinstance(value, TypeError)

def say_hello(self):
return 'hello world'

最佳答案

I'm a bit confused about the fact that with my code, the gm object still exists outside of the with

这是预期的行为; gm 只是另一个变量,它不会在执行离开定义它的范围之前被垃圾回收。

如果您确定它值得额外一行,您可以明确地这样做:

del gm

请注意,如果 gm 是对该对象的唯一引用,它并不能保证该对象将立即被垃圾收集 - 它只是使其在执行离开范围之前符合垃圾收集条件。


如果您担心内存问题,请查看 __slots__ .

关于python - 在python中设计自定义库时如何正确优化内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com