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

Python二维数组更新单个元素致整列变更的原因、解决及Numpy实现

10×10字典矩阵修改异常的原因、解决方法及Numpy实现

原因解析

你写的m = [[{}] * 10]*10存在引用复用问题:

  • [{}] * 10并没有创建10个独立的空字典,而是生成了10个指向同一个字典对象的引用。
  • 外层的*10又把这一行的引用复制了10次,导致整个10×10矩阵里的所有元素,本质上都是同一个字典的引用。
  • 所以当你执行m[0][0] = {"a":1}时,其实是修改了那个唯一的字典实例,所有位置的元素自然都会同步变化。

原生Python解决方法

用嵌套列表推导式,每次循环都新建独立的空字典:

m = [[{} for _ in range(10)] for _ in range(10)]

这样每个{}都是全新的字典对象,修改m[0][0] = {"a":1}时,只会改变对应位置的元素,其他位置仍保持空字典。

Numpy实现方式

如果需要结合Numpy的矩阵操作,可通过指定dtype=object来存储字典对象:

import numpy as np

# 创建空的10×10对象矩阵
m = np.empty((10, 10), dtype=object)
# 逐个初始化独立的空字典
for i in range(m.shape[0]):
    for j in range(m.shape[1]):
        m[i][j] = {}

修改单个元素时,直接通过索引赋值即可,比如m[0, 0] = {"a": 1},这只会改变目标位置的元素。注意:Numpy对非数值型对象的处理没有性能优势,但能兼容Numpy的索引、切片等操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:33:16