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

Python类可变默认参数导致内部实例化异常问题咨询

问题原因分析

这是Python中可变默认参数的经典陷阱,核心原因是:Python的函数(包括类的__init__方法)的可变默认参数只会在函数定义时初始化一次,而非每次调用函数时重新创建。

具体拆解:

  • 你的ndarray类的__init__方法大概率是类似这样的写法:
    def __init__(self, array=[]):
        self.array = array
    
    这里的默认空列表[]是在类定义阶段就创建好的全局对象,所有通过ndarray()(不传参数)创建的实例,都会共享这同一个列表对象。
  • 单次运算(如a*b)时,第一次调用ndarray(),self.array指向这个默认空列表,运算后修改的是这个列表,但此时只有这一个实例在用,看起来符合预期。
  • 二次运算(如z1+c)时,再次调用ndarray(),Python不会重新生成新的空列表,而是直接复用之前已经被修改过的那个默认列表,所以新实例的self.array就带着前一次运算的结果了。

为什么ndarray([])就正常?

当你显式传入[]时,每次调用都会创建一个全新的空列表对象,每个实例的self.array都是独立的,自然不会出现复用的问题。

正确的写法

把默认参数设为None,在方法内部初始化空列表,避免共享:

def __init__(self, array=None):
    if array is None:
        array = []
    self.array = array

内容的提问来源于stack exchange,提问作者ai-py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:29:56