Why a=[nn.Parameter() for i in range(3)] cant add parameters to class automatically?

Hi,
we know

class mymod(nn.Module)
  def __init__:
      self.a = nn.Parameters()

will add self.a to self._parameters by call __new__ method.
My question is : why

class mymod(nn.Module)
  def __init__:
      self.a = [nn.Parameters() for i in range(3)]

cant add parameters automatically?

This is because of the __setattr__ method of the module:

def __setattr__(self, name, value):
        def remove_from(*dicts):
            for d in dicts:
                if name in d:
                    del d[name]

        params = self.__dict__.get('_parameters')
        if isinstance(value, Parameter):
            if params is None:
                raise AttributeError(
                    "cannot assign parameters before Module.__init__() call")
            remove_from(self.__dict__, self._buffers, self._modules)
            self.register_parameter(name, value)
        elif params is not None and name in params:
            if value is not None:
                raise TypeError("cannot assign '{}' as parameter '{}' "
                                "(torch.nn.Parameter or None expected)"
                                .format(torch.typename(value), name))
            self.register_parameter(name, value)

There is a typecheck and a list is another type as nn.Parameter. For things like this you have ParameterList