我正在使用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'
答案 0 :(得分:1)
我对使用我的代码时
之外的gm
with
对象仍存在的事实感到有点困惑
这是预期的行为; gm
只是另一个变量,它不是在执行离开定义范围之前收集的垃圾。
如果你肯定它值得多加一线,你可以明确地做到:
del gm
请注意,它并不保证对象将立即被垃圾收集 - 如果gm
是对象的唯一引用,它只会使它在执行离开作用域之前有资格进行垃圾回收。
如果您担心记忆,请查看__slots__
。