对此的一个答案是始终允许您放入列表的对象管理列表成员资格.例如,而不是说
listA.append(objectA)
Run Code Online (Sandbox Code Playgroud)
你会用的
objectA.addToList(listA)
Run Code Online (Sandbox Code Playgroud)
这将允许您在内部存储包含的所有列表的列表objectA.然后,当你想删除时objectA,你需要调用这样的方法:
def cleanup(self):
for listToClean in myLists:
listToClean.remove(self)
Run Code Online (Sandbox Code Playgroud)
这确实给你的程序带来了一些强大的限制 - 例如,如果副本是由这些列表中的一个组成的,那么这些对象将没有对该副本的引用.您必须假设列表的任何副本(不要忘记切片也是副本)可能在其中包含过时的对象,这意味着您希望尽可能频繁地使用原始列表.