I cannot reproduce the constant output using this small code snippet:
model = models.resnet18()
optimizer = torch.optim.SGD(model.parameters(), lr=1.)
criterion = nn.CrossEntropyLoss()

data = torch.randn(1, 3, 224, 224)
target = torch.randint(0, 1000, (1,))

for _ in range(3):
    out = model(data)
    loss = criterion(out, target)
    loss.backward()
    optimizer.step()
    print(model.fc.weight.detach().numpy())

Try to .clone() the parameter before storing them in the list and let me know, if that helps.
If not, your computation graph might be detached at one point and the parameter might not get any gradients.