Il modo che hai trovato a mio avviso può andare bene, ma quello che dei valutare, secondo me, è quanto grande e "pesante" sia questa lista, perchè altrimenti potrebbe essere più funzionale creare una lista dei soli oggetti modificati (presumo che tu la voglia per gestire in qualche modo le modifiche): se ad esempio a questi oggetti complessi aggiungi un costruttore che accetta come parametro un oggetto dello stesso tipo, valorizzi tutti i dati e questo nuovo oggetto lo metti nella deep copy (oppure fare il contrario, cioè creare una lista dei nuovi oggetti)
Oppure, forse, invece di utilizzare una classe per l'oggetto complesso, utilizzi una struct (ma anche qui dipende quanto è veramente complesso l'oggetto)