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

Python如何按8字节块遍历bytearray,sys.getsizeof返回值偏大原因是什么

问题解答

sys.getsizeof返回值偏大的原因

sys.getsizeof()返回的是Python对象本身占用的全部内存字节数,不是对象存储的有效数据长度。bytes是Python的内置对象,除了你切分得到的8字节有效载荷,还需要存储对象元数据(包括引用计数、类型指针、长度属性等),这部分元数据占了33字节左右,加起来总大小就是你看到的41字节,属于正常情况。
你要确认块的有效长度,直接调用len(chunk)即可,返回值就是你预期的8(文件最后不足8字节的块会返回实际长度)。做值比对的时候直接用chunk == 目标8字节bytes对象就可以,完全不受sys.getsizeof()结果的影响。

已加载字节序列的按块遍历方案

你现有的while循环逻辑基本可用,只有一个小问题:判断条件i <= len(read_file)会在i等于read_file总长度时,切出一个空的bytes对象,调整为i < len(read_file)即可避免。
更简洁易读的实现可以直接用带步长的range()遍历:

with open("read.file", 'rb') as f:
    read_file = f.read()

for offset in range(0, len(read_file), 8):
    chunk = read_file[offset:offset+8]
    # 此处添加你的比对逻辑
    print(len(chunk))

如果需要复用固定块大小的遍历逻辑,可以封装为生成器函数:

def iter_bytes_by_chunk(raw_data: bytes, chunk_size: int = 8):
    for offset in range(0, len(raw_data), chunk_size):
        yield raw_data[offset:offset+chunk_size]

# 调用示例
for chunk in iter_bytes_by_chunk(read_file):
    # 执行比对逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:45:01