Store Pointer Property array/list
Can add methods to the propertygroup definition
Something that is very handy IMO is the ability to add methods to the property group.
Here I've added copy to make a copy of itself to the collection, and add to add an object to the collection. In both cases the object name is used as the collection item name.
Remember that 2.8 uses annotations for properties.
import bpy

class ObjectCopy(bpy.types.PropertyGroup):
    object : bpy.props.PointerProperty(type=bpy.types.Object)    

    def copy(self):
        self.object = self.id_data.copy()
        self.name = self.object.name
        return self.object

    def add(self, ob):
        self.object = ob
        self.name = ob.name
        return self.object

def register():
    bpy.utils.register_class(ObjectCopy)
    bpy.types.Object.copies = bpy.props.CollectionProperty(type=ObjectCopy)

def unregister():
    bpy.utils.unregister_class(ObjectCopy)
    del(bpy.types.Object.copies)
    
if __name__ == &quot;__main__&quot;:
    register()

Some testing in the python console.
&gt;&gt;&gt; C.object.copies.clear()
&gt;&gt;&gt; for o in C.selected_objects:
...     C.object.copies.add().add(o)
...     
bpy.data.objects['Cube.002']
bpy.data.objects['Cube.001']
bpy.data.objects['Cube']

&gt;&gt;&gt; C.object.copies.add().copy()
bpy.data.objects['Cube.005']

&gt;&gt;&gt; C.object.copies['Cube'].object
bpy.data.objects['Cube']