Yes, all Decoder instances are independent, since you’ve initialized each one separately.
In your current approach, yes. However, you could also use an nn.ModuleList, which will return all internal submodule states using its state_dict() method:

modules = nn.ModuleList()
for _ in range(10):
    modules.append(nn.Linear(1, 1))

modules.state_dict()
> OrderedDict([('0.weight', tensor([[-0.0277]])),
             ('0.bias', tensor([-0.3542])),
             ('1.weight', tensor([[0.2417]])),
             ('1.bias', tensor([0.2794])),
             ('2.weight', tensor([[0.6173]])),
             ('2.bias', tensor([0.7524])),
             ('3.weight', tensor([[-0.9020]])),
             ('3.bias', tensor([0.7507])),
             ('4.weight', tensor([[-0.2359]])),
             ('4.bias', tensor([0.6560])),
             ('5.weight', tensor([[-0.8661]])),
             ('5.bias', tensor([-0.9012])),
             ('6.weight', tensor([[0.7482]])),
             ('6.bias', tensor([0.6804])),
             ('7.weight', tensor([[0.7841]])),
             ('7.bias', tensor([-0.6375])),
             ('8.weight', tensor([[0.6187]])),
             ('8.bias', tensor([-0.3414])),
             ('9.weight', tensor([[0.2675]])),
             ('9.bias', tensor([0.0969]))])