How should I think about morphism equality? I am studying category theory, and I think I often struggle between the fuzzy lines between Set as a category and then the category theoretic abstractions.
For example, take monomorphisms. I totally get the idea, but what does it mean for two morphisms to be equal, or not to be equal? It seems like the definition of a category (objects and morphisms between them) doesn't provide for the possibility of comparing morphisms... and yet, in things like monomorphisms, it only makes sense if there is an idea of different morphisms between the same objects that may or may not be equal.
I get that in set, since the underlying object are sets and the morphisms are functions between sets, it's possible that, say...
A = {1, 2, 3}
B = {1, 2}
f = 1 -> 1, 2 -> 1, 3 -> 2
g = 1 -> 2, 2-> 2, 3 ->1

But what in category theory allows me to distinguish between the morphisms f and g?
 A: In a category like $\textbf{Set}$, we know what the morphisms 'mean' in the sense that we have other methods of computing with them than simply the category axioms. In the case of $\textbf{Set}$, this may mean that we know the morphisms are set functions (as defined, for example, in ZFC), or it may mean that we have some axioms for this category which give us extra information about how to compute with morphisms (for example, if we have axiomatized $\textbf{Set}$ using ETCS). In these cases we can use our extra knowledge about the morphisms to determine whether or not two morphisms are equal, as you have done in your question. For example, we may take function extensionality (i.e. if $f(x) = g(x)$ for all $x \in X$, then $f = g$) as an axiom, and then use this to show that two morphisms in $\textbf{Set}$ are equal.
But in a 'general category', where we have no information about the morphisms other than the fact that they satisfy the category axioms, we can only use the category axioms to reason about equality. For example, we know that for any morphisms $f: A \rightarrow B$, $g : B \rightarrow C$ and $h : C \rightarrow D$, 
$$(h \circ g) \circ f = h \circ (g \circ f)$$
by the category axioms alone. Without knowing anything else (assuming any other things about our morphisms, knowing we are working in some specific category like $\textbf{Set}$ or the category of groups or spaces etc.), then all we can do is use the equalities coming from the axioms. For example, we also know that
$$(f \circ g) \circ (\text{id} \circ h) = f \circ (g \circ h)$$
by the axioms alone, and therefore this equality holds in any category (can you see why?).
Have you heard of free monoids or free groups? A monoid is a set where you can smush things together associatively, and where there is some element that doesn't do anything when you smush it. Axiomatically, if $x$ and $y$ are in our monoid $M$, then $(xy)$ is what we get when we smush them, and there is some element $1$ in $M$ so that $$1x = y1 = x$$ 
and
$$(xy)z= x(yz).$$
In a free monoid, we start with a few symbols $a$, $b$, $c$ (or whatever) and say "add in a symbol 1 and smush them together however you like!" So we end up with things like
$(aa)b$, and $(((ab)1)(a(c1))c$ and so on. But we don't know anything about these symbols or what it means to smush them other than the fact that we can smush them, and that the monoid axioms hold so that for example $(aa)b = a(ab)$ and $(((ab)1)(a(c1))c = ((ab)(ac))c$.
But consider the set $\{\top, \bot\}$ of truth values and say that smushing is 'and', written $x \wedge y$ for '$x$ and $y$'. This is a monoid because it satisfies the axioms above, but it is not free because we know more about the symbols than just that they satisfy the axioms. For example, we know that $\top \wedge \top = \top$. So in a particular monoid, we can reason about equality using any of the knowledge we have about that particular monoid, but in a free monoid (or in a 'generic monoid'), we can only reason about equality using the axioms. The exact same thing holds for categories.
I hope this was helpful and not too rambling!
