python – Django在100个对象后停止

我做了一个小的Django项目,我想比较添加的对象以找到dublets(我已经使用了unique_together Meta选项,但这并不完全符合我的需要).

当我启动脚本时,它在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对象列表.对象的嵌套迭代按预期方式工作.使用Django Querysets,行为有些不同. Queryset是从数据库中获取的,只有一个指针.将Queryset强制转换为常规列表是最简单的解决方法.

点赞