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

向Numpy对象数组指定行追加元素时所有行同步更新的问题求助

向Numpy对象数组指定行追加元素时所有行同步更新的问题求助

嘿,我太懂你这个困扰了!这其实是Numpy对象数组里一个非常容易踩的小坑,核心原因和Python可变对象的引用机制有关。

你用myArr.fill([])的时候,看起来是给数组的每个位置都塞了一个空列表,但实际上,你是把同一个空列表对象的引用赋值给了数组里的每一个元素。因为列表是可变类型,不管你通过哪个索引去调用.append(),本质上都是在修改那个唯一的列表对象,所以所有行都会跟着同步变化,这就导致了你看到的“一修改全变”的情况。

那怎么解决呢?给你两个简单的方案:

  • 方案一:逐个初始化独立的空列表
    不用fill(),而是循环给每个位置单独创建空列表,确保每个元素都是独立的对象:

    myArr = np.empty(10, dtype=object)
    for i in range(len(myArr)):
        myArr[i] = []
    
  • 方案二:用列表推导式直接创建数组
    这是更简洁的写法,一次性生成包含10个独立空列表的对象数组:

    myArr = np.array([[] for _ in range(10)], dtype=object)
    

不管用哪个方案,之后再执行myArr[2].append(1),你就能得到想要的结果了:

array([list([]), list([]), list([1]), list([]), list([]), list([]),
       list([]), list([]), list([]), list([])], dtype=object)

备注:内容来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:09:33