ng-show/ng-hide can show and hide the rendered data, that is, it always kept the rendered data and show or hide on the basis of that directives. However, ng-if can only render data whenever the condition is true. It doesn't have any rendered data until the condition is true.
We can say, ng-show/hide internally kept data but cannot display on UI, however, ng-if cannot keep data until the condition is true.