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

Python存储大文本字符串时内存占用异常过高的技术问询

问题:CPython读取文本文件时字符串内存占用远超文件大小

处理大体积文本文件时,发现CPython将文件内容存储为字符串变量所需的内存远大于文件本身的大小,具体测试情况如下:

测试脚本

import time
@profile
def func():
    with open('full_it_cc100/it.txt_part_0001.txt','r') as f:
        stringu = f.read()
    return stringu

stringu = func()
print("I HAVE STRINGU")
time.sleep(3)

测试现象

  • 文本模式('r')读取:500MB的意大利语文本文件,func()执行完成后内存占用达2GB,字符串内存占用为原文件的4倍,远超预期
  • 二进制模式('rb')读取:内存占用为600MB,结果符合预期

环境与补充数据

使用CPython 3.10.11环境,针对意大利语文本文件,执行以下代码的输出:

  • print(len(stringu)): 517122251
  • print(stringu.__sizeof__()): 2068489080
  • 字符串包含的Unicode码点:覆盖ASCII(0-126)、非断空格(160)以及Latin-1扩展字符(224-255)

补充测试(英语文本)

测试500MB英语文本文件时,内存占用约1GB,对应输出:

  • print(len(stringu)): 523598410
  • print(stringu.__sizeof__()): 1047196894
  • 字符串包含的Unicode码点:以ASCII为主,仅少量扩展字符

疑问

是否仅由编码方式导致内存膨胀?但4倍的幅度明显过高,怀疑意大利语文件的字符组成或数据集特性还有其他影响因素,后续会进一步测试。

复现方法

  1. 安装依赖:pip install memory-profiler
  2. 运行脚本:mprof run script_name.py;也可移除@profile装饰器直接运行脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:35:31