You are creating references in:
[nn.Linear(3, 3)]*2

such that you are in fact initializing a single linear layer and are just repeating it.
Use [nn.Linear(3, 3) for _ in range(2)] to create new objects.
Here is a small example:
# use references
layers = nn.ModuleList([nn.Linear(3,3)]*2)
# parameters are equal
print(layers[0].weight)
print(layers[1].weight)

# inplace manipulations changes both parameters
with torch.no_grad():
    layers[0].weight.fill_(0.)
print(layers[0].weight)
print(layers[1].weight)

# create new modules
layers = nn.ModuleList([nn.Linear(3,3) for _ in range(2)])
# different
print(layers[0].weight)
print(layers[1].weight)

with torch.no_grad():
    layers[0].weight.fill_(0.)
print(layers[0].weight)
print(layers[1].weight)