Die Begriffe flache Kopie und tiefe Kopie beschreiben in der objektorientierten Programmierung die Art und Weise, mit der ein Objekt dupliziert wird.
Flache Kopie
Ein Objekt enthält anstatt einer Kopie nur Referenzen auf die Strukturen oder untergeordnete Objekte, die sich an anderen Adressen im Speicher befinden – daher werden Objekte auch als Referenztypen (z. B. in Sprachelemente von C#) bezeichnet.
Bei einer flachen Kopie wird nur das Objekt dupliziert. Die enthaltenen komplexen Strukturen oder Verweise auf untergeordnete Objekte werden nicht mit dupliziert. Somit existiert ein weiteres Objekt (vom gleichen Typ wie das erste Objekt) im Speicher, dessen Inhalt Verweise auf dieselben Strukturen und untergeordneten Objekte beinhaltet wie beim Originalobjekt. Der Inhalt der referenzierten Objekte und Strukturen wurde daher nicht mit dupliziert.
Tiefe Kopie
Eine tiefe Kopie erzeugt von allen Attributen des Objekts ebenfalls eine Kopie, so dass sich das Originalobjekt und seine Kopie keine Attribute teilen. Dies kann z. B. mit Hilfe eines Kopierkonstruktors durchgeführt werden. Rekursive Attribute bleiben außen vor.