Yes, this should be the case as shown by the following code snippet using your example code:
model = network()
x = torch.randn(10, 40)
output_list = model(x)

output_list[0].mean().backward(retain_graph=True)
for name, param in model.named_parameters():
    print(name, param.grad)

output_list[1].mean().backward(retain_graph=True)
for name, param in model.named_parameters():
    print(name, param.grad)

output_list[2].mean().backward()
for name, param in model.named_parameters():
    print(name, param.grad)