声明了七个类实例。为其中三个指定相同的参数值(存储在self.myList
属性中)。
所有七个实例都存储在inst_listA
中。其中一半存储在list_B
现在我迭代list_B
,查看是否有任何实例需要删除(在本例中,我要删除三个存储相同值的实例)。一旦找到这样的实例,我就应用del
,希望删除的实例从两个列表中删除:inst_listA
和inst_listB
。但这显然没有发生。
问题:如何从列表中删除变量(对象实例),以便在代码中每隔一次从任何引用中永久删除它们
class MyClass(object):
def __init__(self, myList):
super(MyClass, self).__init__()
self.myList = myList
def getList(self):
return self.myList
inst1=MyClass([1,2,3, None])
inst2=MyClass([3,4,5, None])
inst3=MyClass([6,7,8, None])
inst3_1=MyClass([6,7,8, None])
inst3_2=MyClass([6,7,8, None])
inst4=MyClass([9,10,11, None])
inst5=MyClass([12,13,14, None])
inst_listA=[]
inst_listA.append(inst1)
inst_listA.append(inst2)
inst_listA.append(inst3)
inst_listA.append(inst3_1)
inst_listA.append(inst3_2)
inst_listA.append(inst4)
inst_listA.append(inst5)
inst_listB=[]
inst_listB.append(inst2)
inst_listB.append(inst3)
inst_listB.append(inst3_1)
inst_listB.append(inst3_2)
inst_listB.append(inst4)
print inst_listA
print inst_listB
for inst in inst_listB:
if inst.getList()==[6,7,8, None]:
inst_listB.remove(inst)
del inst
print 'instance deleted'
print inst_listB
print inst_listA
del
语句实际上并不删除对象,它只是删除一个名称。所以,当你这么做的时候:…您正在删除本地名称
inst
。对象的任何其他名称,如inst_listB[1]
,仍然存在。无法同时删除一个值的所有名称,因为该值不知道人们给它的所有名称想想这在现实生活中是如何工作的:我拿到电话簿,查一下Sputnix,然后撕下你的页面。这不可能影响城市里其他所有的电话簿。即使我可以删除你的价值,比如说,在一家夜总会跟踪你并向你开枪(假设凯尔·里斯不在那里阻止我),这仍然不会把你从所有的电话簿中删除,这只意味着没有人可以再使用这些电话簿给你打电话了。*
无论如何,看起来您要做的是从两个列表中删除
[6, 7, 8, None]
的所有副本。最简单的方法是直接进行:*在Python中,这一点的字面等价物是将弱引用放入列表中。这就确保了只有一个真正的参考文献,当你杀死它时,弱的参考文献仍然存在,但是没有什么可以参考的,就像一个死人的电话簿条目一样。但您还不想了解weakrefs。
相关问题 更多 >
编程相关推荐