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

为何Python类中默认空列表参数初始化后长度为2?

问题原因分析:Python可变默认参数的陷阱

这是Python中可变默认参数的经典陷阱:Python的可变默认参数(比如列表[]、字典{}这类)只会在函数/方法定义时初始化一次,而不是每次调用方法时重新创建新的对象。

具体到你的代码:

  • 当你定义Cars类的__init__方法时,默认参数arr=[]就创建了一个空列表对象,这个对象会被所有不带参数调用Cars()的实例复用。
  • 你之前的调试或测试代码中,大概率有修改过这个默认列表的操作(比如给它添加了两个None元素),导致这个列表的长度变成了2。之后再调用Cars()时,会直接使用这个已经被修改的列表,所以len(arr)返回2,最终len(my_cars)得到2。

修复方案

把默认参数改为不可变的None,在方法内部创建新的可变对象,避免复用同一个实例:

class Cars:
    def __init__(self, arr=None):
        # 如果没有传入arr,就创建一个新的空列表
        self.Cars = arr if arr is not None else []
        self.size = len(self.Cars)

    def __len__(self):
        return self.size

这样每次调用Cars()时,都会生成一个全新的空列表,不会受到之前操作的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:32:36