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

关于Python中Array_Seq类__len__与build方法的逻辑疑问

关于MIT CS6.006 Recitation2中Array_Seq类size逻辑的解释

这个设计的核心是分离底层存储的物理容量和序列的逻辑有效元素数,具体运行机制可以拆解为以下几点:

  • build()方法的作用:
    当调用build()初始化序列时,它会将传入的可迭代对象(比如列表)的元素存入底层数组self.A,然后执行self.size = len(self.A)——这一步是把初始状态下的元素总数同步到self.size变量中,让它成为序列的逻辑长度标记。

  • len()返回self.size的原因:
    在静态数组的抽象实现中,底层存储self.A的物理长度(容量)是固定的,无法动态调整。但我们可以通过维护self.size来跟踪序列中实际有效的元素数量:

    • 比如执行删除操作时,不需要真的缩短底层数组(静态数组不支持动态缩容),只需要将self.size减1,后续访问元素时只处理前self.size个位置的元素;
    • 这时候len(self.A)得到的是底层数组的总容量,而self.size才是用户真正需要的、序列中实际存在的元素数量,__len__()返回它才能符合“序列长度”的直观预期。
  • 反例:如果__len__()直接返回len(self.A)会怎样?
    假设初始化后删除了一个元素,底层数组self.A的长度没变,但实际有效元素少了一个。这时候用户调用len()得到的结果会和实际元素数不符,违背了抽象数据类型的行为一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:05:24