I’m still studying the online course on quantum computing where Prof. Vazirani went through the no cloning theorem. It is very interesting to see that something that can lead to some very subtle consequence can also have a very simple proof. Below is a summary.
Basically, the theorem states that no quantum state can be cloned by quantum evolution, the only allowed operation in reality. Let say we want to clone a quantum state $latex |\psi\rangle=a|0\rangle+b|1\rangle$ by passing the product state $latex |\psi\rangle \otimes |0\rangle$ through some unitary operator. The desired output should then be $latex |\psi\rangle \otimes |\psi\rangle=a^2|0\rangle+ab|01\rangle+ab|10\rangle+b^2|1\rangle$. In particular, if we consider the cases when $latex |\psi\rangle=|0\rangle$ and $latex |\psi\rangle=|1\rangle$, the outputs should be $latex |00\rangle$ and $latex |11\rangle$, respectively. However, by linearity, this implies that the output when $latex |\psi\rangle=a|0\rangle+b|1\rangle$ should be $latex a|00\rangle+b|11\rangle$ instead. Therefore, cloning is possible only when $latex ab=0$, i.e. when $latex |\psi\rangle$ is either $latex |0\rangle$ or $latex |1\rangle$.