【发布时间】:2013-04-09 13:40:13
【问题描述】:
假设我有一个应用程序列表,描述为自定义对象。我决定对原始应用程序列表进行深度复制,这样我就可以拥有一个充当可用应用程序池的列表。为了分配应用程序,我随机选择池的一个子集,然后在原始列表中找到这些应用程序,以便我可以更新它们的信息。然后,从池中删除分配的应用程序。但是,由于某种原因,这些应用程序永远无法在原始列表中找到:
list1 = [App1,App2,App3,App4,App5]
pool = copy.deepcopy(list1)
num_apps = rand.randrange(0,5)
random.shuffle(pool)
selected_apps = copy.deepcopy(pool[:num_apps])
for app in selected_apps:
locn = list1.index(app)
print locn
上面的代码实际上会返回一个 ValueError ,表示在 selected_apps 中找不到一个项目。错误是因为我正在制作包含非 Python 原生对象的列表的深层副本,还是其他原因?
【问题讨论】:
-
您是否为您的 App 类实现了
__eq__方法?很可能发生的情况是 .index 方法无法比较两个相同的 App 对象,因为您已经完成了深层复制并且它们的内存地址已经改变。 -
啊,我还没有尝试实现
__eq__方法。我去看看,谢谢!