python找不到对象怎么办_Python对象正被一个我找不到的对象引用

我试图在python中从内存中删除一个对象,但是遇到了一个没有被删除的对象。据我所知,如果没有对对象的引用,垃圾回收器将在运行时取消分配内存。但是在我删除了所有引用之后,如果我运行bar = Foo()

print gc.get_referrers(bar)

del bar

baz = gc.collect()

print baz

我得到的答复是[< frame object at 0x7f1eba291e50>]

0

那么为什么它不删除对象呢?在

如果我这样做的话,所有对象的实例都会得到相同的答复

^{pr2}$

我如何从一个对象中完全删除所有引用者/知道在all上的frame对象是什么吗?在

我以为是物体框架(?)它包含了程序中所有对象的列表,但我无法确认/找到一种方法来消除对象被所述神秘(对我而言)对象fram的引用。在

任何帮助都将不胜感激

编辑:

好吧,我把代码重写成一个简单的形式,把所有的东西都去掉,除了基本的内容import random, gc

class Object():

def __init__(self):

self.n=None

self.p=None

self.isAlive=True

def setNext(self,object):

self.n=object

def setPrev(self, object):

self.p=object

def getNext(self):

return self.n

def getPrev(self):

return self.p

def simulate(self):

if random.random() > .90:

self.isAlive=False

def remove(self):

if self.p is not None and self.n is not None:

self.n.setPrev(self.p)

self.p.setNext(self.n)

elif self.p is not None:

self.p.setNext(None)

elif self.n is not None:

self.n.setPrev(None)

del self

class Grid():

def __init__(self):

self.cells=[[Cell() for i in range(0,500)] for j in range(0,500)]

for x in range(0,100):

for y in range(0,100):

for z in range(0,100):

self.cells[x][y].addObject(Object())

def simulate(self):

for x in range(0,500):

for y in range(0,500):

self.cells[x][y].simulate()

num=gc.collect()

print " " + str(num) +" deleted today."

class Cell():

def __init__(self):

self.objects = None

self.objectsLast = None

def addObject(self, object):

if self.objects is None:

self.objects = object

else:

self.objectsLast.setNext(object)

object.setPrev(self.objectsLast)

self.objectsLast = object

def simulate(self):

current = self.objects

while current is not None:

if current.isAlive:

current.simulate()

current = current.getNext()

else:

delete = current

current = current.getNext()

if delete.getPrev() is None:

self.objects = current

elif delete.getNext() is None:

self.objectsLast = delete.getPrev()

delete.remove()

def main():

print "Building Map..."

x = Grid()

for y in range (1,101):

print "Simulating day " + str(y) +"..."

x.simulate()

if __name__ == "__main__":

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值