Yes. Its a correct way of sharing the module.
After correcting some obvious bugs in your code (super class __init__(), indentation, etc), below is the working code. You can use model.named_parameters() to check the learnable parameters:
import torch
import torch.nn as nn


class SubModule(nn.Module):
    def __init__(self, embedding):
        super(SubModule, self).__init__()
        self.embedding = embedding
        self.fc = nn.Linear(200, 200)

    def forward(self, input):
        return self.fc(self.embedding(input))


class Model(nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.embedding = nn.Embedding(10000, 200)
        self.net_a = SubModule(self.embedding)
        self.net_b = SubModule(self.embedding)

    def forward(self, input):
        return self.net_a(input) + self.net_b(input)

m = Model()
for n, p in m.named_parameters():
    print(n, p.shape)


output:
('embedding.weight', (10000, 200))
('net_a.fc.weight', (200, 200))
('net_a.fc.bias', (200,))
('net_b.fc.weight', (200, 200))
('net_b.fc.bias', (200,))