Since you are initializing the feat_out list as a global object, this behavior is expected.
You could either reinitialize it after the first forward pass or use a dict instead, which can be easily used to replace the outputs.
Also note, if you are not running the forward pass in a with torch.no_grad() block, the output tensors will stay attached to the computation graph, which will prevent PyTorch from deleting this graph after the backward call. If you don’t need these output tensors for a gradient calculation you could alternatively store the detached version via feat_out.append(output.detach()).