As you can see by running the following example when I load the state_dict the weights are the same as the ones of the original module. By using a simple list to hold the linear modules instead they differ.
import torch

class M(torch.nn.Module):      
  def __init__(self): 
    super(M, self).__init__() 
    self.multi_output = torch.nn.ModuleList([torch.nn.Linear(50, 2) for i in range(10)]) 

  def forward(self, x): 
    outputs = [head(x) for head in self.multi_output] 
    return outputs 


m = M()
input = torch.zeros(10,50)
print( m(input)[0] )
print( m.multi_output[0].weight )


torch.save( m.state_dict(), 'm.pt' )

m = M()
m.load_state_dict(torch.load('m.pt')) 
print( m(input)[0])
print( m.multi_output[0].weight )