I'll put here the data structure diagram for reference:
The material can be linked to Data (default) or to Object
The Object is just a container for the Object Data within, which is a separate datablock inside Blender, that can be used by any number of same type Objects. Similar like a Material can have multiple users.
There are different ways you can make copies:
Duplicate Object CtrlD - duplicates the object and by default also the mesh. What is duplicated and what is instantiated can be set in User Preferences under Editing:
Duplicate Linked AltD - duplicates the object, but links the rest (like leaving all checkboxes from point above unchecked). In case of mesh object makes a mesh instance - shares only 1 mesh between them - object data is not duplicated
- Duplivets, duplifaces, dupliframes:
- tells Blender to use own object data (verts, faces, animation data at all frames) as transforms for copies of parented object(s)
- the copies are instances of the parented object(s), nothing is duplicated, not even the object
- same as before, but whole group of objects is instantiated
- makes only 1 copy using own's object transformation, doesn't make much sense to use enything else than Empty Object.
- Particle/Hair systems:
- transforms are taken from particle data
- Linked object/group:
- same as with Dupligroup, but links from another .blend file.
When you Make Duplicates Real CtrlShiftA, only the first relation in the chain changes from instances to real duplicates. You can now set different modifiers, materials (if you link them to object), constraints, etc. for these now real objects, but they still keep just one mesh linked between them - exactly same like a mesh instance.
To turn them into full duplicates use Make Single User U > Object & Data: this creates a mesh duplicate for each object, turning them into full copies (ctrl-d) effectively and you can now edit each copy's mesh data independently.