A tag is immutable.
Whereas you can create a branch named “1.0.0” – you, or anyone with commit rights, can also then simply push to that branch (deliberately or not) and change what 1.0.0 means.
You can’t do that with a tag, once you create a tag – that’s it; Tag 1.0.0 means exactly that and can’t be changed*.
That’s the main practical difference between a tag and a branch
* You can delete and recreate a tag thereby changing a tag, but certainly not by accident.