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

Tuple与List内存大小对比:新增元素后List内存不升反降原因咨询

List与Tuple内存反常现象底层逻辑解释

首先明确两类数据结构的基础内存分配规则:

  • 元组(Tuple)是不可变对象,字面量初始化时会分配刚好容纳所有元素的内存空间,无额外预分配。64位CPython环境下每多存一个元素,内存占用固定增加8字节(指针长度),你观测到的元组从88字节涨到96字节属于完全符合预期的正常表现。
  • 列表(List)是可变动态数组,仅在调用append/extend等动态修改方法时才会触发超额预分配逻辑(预留空间避免每次修改都重新申请内存);如果用字面量直接初始化列表,CPython默认会分配刚好匹配元素数量的内存空间,正常情况下7元素列表的内存占用应该比6元素高8字节。

你观测到的7元素列表内存反而更小的反常现象,和CPython的小对象内存复用机制直接相关,属于测试环境不严谨导致的偶发现象:

  • CPython为了降低小对象的频繁申请/销毁开销,维护了一个列表空闲链表(freelist):销毁长度不超过80的列表时,不会立刻把内存归还给系统,而是存到空闲链表中留待后续复用。
  • 如果你的两段测试代码没有在独立的干净运行环境执行,而是在同一个上下文里先后运行:很可能在创建第一个6元素列表之前,你已经创建并销毁过一个更大的列表,刚好空闲链表中有152字节的可用内存块,就被直接复用给了6元素列表;后续创建7元素列表时,没有匹配的空闲块可用,就直接申请了刚好需要的120字节内存,最终出现了长列表内存反而更小的反常结果。

你可以把两段测试代码分别放到独立的脚本中,用同一个Python解释器执行,就会得到符合预期的结果:7元素列表的内存占用比6元素列表高8字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:48:02