为何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
相关产品推荐
相关产品推荐

