我已经做了一个小的Django项目,我想将添加的对象相互比较以找到dublet(我已经使用了unique_together
元选项,但这并不完全符合我的需要)。你知道吗
当我启动脚本时,它在100次迭代之后就完成了,尽管有大约60000个对象。你知道吗
objects = Django_app.objects.all()
for object_a in objects:
for object_b in objects:
compare( object_a, object_b)
有人能解释一下这种行为吗?你知道吗
解决方案:
objects = list( objects.all() )
谢谢你们!你知道吗
在遍历列表时,Python使用指针遍历对象列表。在对同一对象(相同的项目列表)进行迭代时,Python会注意使用两个单独的指针。因此,当您执行
objects = list(objects)
操作时,这将创建一个普通的Python对象列表。在objects
上的嵌套迭代的工作方式与预期的一样。对于Django查询集,行为有些不同。查询集是从数据库中提取的,只有一个指针。将Queryset强制放入常规列表是最简单的解决方法。你知道吗相关问题 更多 >
编程相关推荐