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

Python实现DNN时列表引用异常:修改n致其他列表同步变更

问题分析与解决

核心原因

Python里列表属于可变对象,直接赋值(比如n = weights、org_weights = weights)只是复制了对象的引用,并非创建独立的新列表。所以你修改n的元素时,实际上是在操作weights和org_weights共同指向的同一个内存对象,导致三者同步变化。

另外你代码里的n=org_weights只是把n的引用指向org_weights,但之前修改n[i][j]已经改变了原对象的元素,根本没起到“恢复”的作用。

修复方案

第一步:正确初始化org_weights为深拷贝

先确保org_weights是weights的完全独立副本,因为你的列表是二维的,需要用深拷贝:

import copy

# 初始化时做深拷贝,确保org_weights和weights完全独立
org_weights = copy.deepcopy(weights)

第二步:每次循环重新生成独立的n

每次循环都从org_weights深拷贝出一个新的n,修改指定元素后测试,这样不会影响原有的org_weights和weights:

import copy

for i in range(size):
    for j in range(len(weights[i])):
        print("the index is [",i,",",j,"]")
        # 从原始备份深拷贝出独立的n
        n = copy.deepcopy(org_weights)
        # 只修改当前n的指定元素
        n[i][j] = weights[i][j] * 3
        model.set_weights(n)
        test_result = model.test_on_batch(X_test,y_test)
        print(test_result)
        # 不需要再赋值n=org_weights,下一次循环会重新生成新的n

额外说明

如果你的weights是一维列表,用浅拷贝(比如n = org_weights[:])就够,但二维及以上嵌套列表必须用深拷贝,否则内层列表还是共享引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:15:32