我想做的很简单,我有一个很大的命令,就像这样:
class a():
m=0
def __init__(self, m):
self.m = m
def __int__(self):
return self.m
b=a(4)
c=a(6523)
d=a(741)
e=a(84521111)
dict={0:b,1:c,2:e,3:d,4:None,5:None,6:None}
for ele in dict.values():
if ele is not None:
print int(ele)
else:
print "None"
真实的元素有4096个元素。基本上,当我决定杀死对象c时,我会这样做:
dict[1]=None
因为我不想删除键号1,所以它可以正常工作,但是如果该对象仍然在某个地方并且有4096个对象,则该对象在我的小型嵌入式系统上可能是个问题。我可以使用以下方法检查活动对象:
import gc
for obj in gc.get_objects():
if isinstance(obj, a):
print obj
输出:
<< strong>主要。一个位于0xb749c96c的实例 << strong>主要。实例位于0xb749caac> << strong>主要。实例位于0xb749c9cc> << strong>主要。实例位于0xb749cc0c>
那么,如何确定从内存中删除这些对象?
Nota :del dict [1]不起作用,因为它也删除了键,与pop()相同。
我仍在使用Python 2.7 ...
答案 0 :(得分:2)
在将它们添加到字典中之前,请确保已考虑它们在内存中的事实。
>>> b=a(4)
>>> c=a(6523)
>>> d=a(741)
>>> e=a(84521111)
>>>
>>> dict={0:b,1:c,2:e,3:d,4:None,5:None,6:None}
>>>
>>> for obj in gc.get_objects():
... if isinstance(obj, a):
... print obj
...
<__main__.a instance at 0x7f4078a34dd0>
<__main__.a instance at 0x7f4078a34d88>
<__main__.a instance at 0x7f4078a34d40>
<__main__.a instance at 0x7f4078a34cf8>
现在删除原稿:
>>> del(b)
>>> del(c)
>>> del(d)
>>> del(e)
>>>
>>> for obj in gc.get_objects():
... if isinstance(obj, a):
... print obj
...
<__main__.a instance at 0x7f4078a34dd0>
<__main__.a instance at 0x7f4078a34d88>
<__main__.a instance at 0x7f4078a34d40>
<__main__.a instance at 0x7f4078a34cf8>
它们仍在内存中,因为它们在字典中。现在从字典中删除它们:
>>> dict[3] = None
>>> dict[2] = None
>>>
>>> for obj in gc.get_objects():
... if isinstance(obj, a):
... print obj
...
<__main__.a instance at 0x7f4078a34dd0>
<__main__.a instance at 0x7f4078a34d88>
>>>
我们刚刚删除了2个对象。