You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django问题:传递列表与函数处理结果到模板时变量值异常

问题解决:数独生成器与求解器的变量污染问题

问题出在Python可变对象的引用传递特性上:你的solve函数大概率是在原地修改传入的grid列表(而非创建新列表返回),导致grid和solved指向同一个内存对象。你在调用solve前打印grid得到的是未完成数独,但调用solve后原grid已被修改为已解状态,模板中自然会显示已解结果。

解决方案

在调用solve时传入grid的深拷贝,避免原列表被修改:

  1. 在views.py中导入copy模块:
import copy
from functions import *
  1. 修改solve的调用方式,使用深拷贝:
def sudoku(request):
    grid = make_sudoku() # 生成未完成的数独列表
    # 传入grid的深拷贝,原grid不会被修改
    solved = solve(copy.deepcopy(grid)) 
    count = [i for i in range(9)]
    context = {
        'grid': grid,
        'solved': solved,
        'count': count
        }
    return render(request, 'main/sudoku.html', context)

原因说明

grid是二维列表(列表的列表),属于可变容器。浅拷贝(如grid.copy())仅复制外层列表,内层子列表仍为引用关系,因此必须用copy.deepcopy()完全复制整个二维结构,确保solve函数操作的是独立副本,不会影响原grid。

若可以修改functions.py中的solve函数,也可重构它,让其创建并返回新的数独列表,而非原地修改输入列表,同样能解决问题。

内容的提问来源于stack exchange,提问作者Mediocrates78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:11:20