DeepCopy erzeugt dir eine Instanz einer Klasse und deren Referenzen. Das ist korrekt und bereits getestet, sonst würde ichs nicht schreiben.
Vielleicht ist das Beispiel nur schlecht gewählt.
In diesem Fall wäre die Serialisierung des Objekts wohl geeigneter.
String braucht kein DeepCopy, weswegen ich das als "Ausnahme" ansehe.
Ich war ja selbst mal Anfänger und kenne das Problem. Im Internet wirst du manchmal erschlagen und findest aus diesem Grund keinen eindeutigen Weg.
EDIT:
Ich habe mein Beispiel angepasst. Das hat jetzt nur 2 Nachteile. Einerseits muss die Klasse serialisierbar sein und zum anderen kann es zu Problemen mit abgeleiteten Klassen kommen.
Edit2:
Sorry, du hast Recht. Mein Fehler. Die Deepcopy Funktion erzeugt nur eine Schattenkopie.
Edit3:
Der vollständigkeithalber
hier ein Beispiel von Microsoft, was die Implementierung von Clone (ohne Interface) zeigt, wie bereits von Th69 vorgeschlagen wurde. Da ist das Beispiel auch besser als meins.