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

如何高效存储数百万对64位整数至集合中?

高效存储百万级64位整数对的集合方案

针对你需要存储数百万对64位整数、追求低内存和快速增查的需求,以下是几个实用方案:

方案1:用struct打包字节串存原生集合

这是最轻量化且无需第三方依赖的方案,直接利用Python集合可存储哈希类型(bytes)的特性,内存占用接近理论值。

每对64位无符号整数可打包为16字节的bytes,一百万对仅需16MB(1.28亿比特)的基础存储,集合哈希表的额外开销仅约20%-30%,总内存非常接近你的目标。增查操作均为O(1)平均复杂度,速度与原生集合一致。

代码示例:

import struct

# 统一字节序打包两个uint64为16字节bytes
def pack_pair(a, b):
    return struct.pack('<QQ', a, b)

# 初始化集合
pair_set = set()

# 添加整数对
pair_set.add(pack_pair(123456789, 987654321))

# 查询整数对
if pack_pair(123456789, 987654321) in pair_set:
    print("该整数对已存在")

方案2:自定义数组+哈希映射(极致内存优化)

若希望进一步压缩集合哈希表的额外开销,可先用array.array('Q')存储所有整数对的扁平化数据(每对占两个uint64元素),再用字典维护“整数对哈希值→数组索引”的映射。这种方式内存更接近理论值,但需要手动处理冲突和增查逻辑,代码复杂度更高,适合对内存有极致要求的场景。

方案3:第三方库pyroaring(适合超大规模数据)

如果数据量远超百万级,可使用pyroaring库——它基于Roaring Bitmap实现,内存效率极高。将每对64位整数合并为一个128位整数(如(a << 64) | b,Python原生支持大整数),存入pyroaring.Bitmap中,增查速度极快,内存占用远低于原生集合。不过该方案需要额外安装依赖。

总结

优先选择方案1,它平衡了实现复杂度、内存占用和操作速度,完全满足你的需求,且无需额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:12:36