Thanks @albanD  for responding so quickly. I understand your points and the part about handling nested names. But I want understand why is it a problem when I use setattr() for each of those weights/biases separately via MetaModule - something like this:
new_name_params = ...
for xxx in modules_of_network:
   for name, p in xxx.named_parameters():
       setattr(xxx, name, new_named_params[name])

I think I understand the problems in this approach to some degree but I am not clear how using setattr() in a custom nn.Module - MetaModule doesn’t throw the same kind of errors even though the parameters witness an in-place update.