This question already has an answer here:
I've had a hard time to figure out why I couldn't set a different material for a given face on a mesh used by two objects (duplicate by AltD).
As soon as I was assigning a material to a face on one object, the face was also changed on the other object, in spite the material was 'object-linked'.
I initially set the material slots exactly the same for the two objects, including materials used by both objects. What I realized (and the documentation doesn't help) is that one doesn't assign a material to a face, one rather assign the material slot. This slight difference has indeed a lot of consequences.
The solution was to set different materials to the same slot in each object and not changing the material-face assignment.
Slots have a taste of C pointers for the mass... whatever, this leaves me with more questions:
Is that correct the slots are the actual entities which have the 'storage location' attribute and are stored either at mesh ('data') level or at 'object' level?
Is that correct slots (not materials) are assigned to faces, and in the case of object duplicates sharing the same mesh, the face-slot assignment done with the 'Assign' button is shared between duplicates?
Is it true that a face is assigned by reference to the absolute position of a slot in the list? The evidence is using the up/down arrow of the slot list in the Material tab, to change the order materials appear, actually changes which material is assigned to a face .
That's the general idea, do I miss an important point regarding the use of the material slots? Any reference to good documentation to go further appreciated, especially a description of the model.