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

使用numpy.repeat创建集合数组时集合不独立的原因是什么

问题原因

np.repeat处理Python可变对象时,只会重复存储对象的引用,不会创建新的独立对象。你传入np.repeat(set(), 3)时,整个流程里只创建了1个空集合实例,生成的长度为3的numpy数组里,三个索引位置存的全是指向这同一个集合的内存地址,本质上三个位置指向的是同一个东西。
这种情况下不管你给哪个索引对应的集合加元素,修改的都是那唯一的一个集合对象,打印时三个位置自然会同步显示修改后的结果。

你可以用id()函数验证三个元素的内存地址:

import numpy as np
array_3_sets = np.repeat(set(), 3)
print(id(array_3_sets[0]), id(array_3_sets[1]), id(array_3_sets[2]))

运行后会看到三个ID完全相同,证实三个位置指向同一个集合对象。

正确写法

要得到三个互相独立的集合,不能直接用np.repeat传入单个集合实例,需要在生成数组时为每个位置创建全新的集合对象,用列表推导即可实现:

import numpy as np
array_3_sets = np.array([set() for _ in range(3)])
print(array_3_sets)
array_3_sets[0].add(0)
array_3_sets[1].add(1)
print(array_3_sets)

运行后就能得到预期输出:

[set() set() set()]
[{0} {1} set()]

注意:这个问题不是set独有的,所有Python可变对象(列表、字典、自定义类实例等)用np.repeat批量填充时都会出现同样的引用复用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:15:36