If you decide to change instance, it's because you no longer need the instance from which it was changed. It's a way of dumping an object for another one. Basically, it's a destroy the current instance and create another object at it's position. So yes, it's a good practice to do this if what you want to do is have another object at the current instances position.
The question you are asking is a bit weird because we have no context. Why would you want to change instance? If we have a context and a reason why you want to do it, we'll be able to say if it's the right function for what you need.
If you only want to change the image of the object, you would simply change the sprite_index to something else.
A few other things:
• if you change instance, the code after that line won't happen and never execute because you object does not exist anymore.
• object_index is usually used to get the handle of an object to change values of that object or do other actions AS this object
For example:
GML:
iii = other.object_index;
// 2 things....
// The with statement
with iii {
// Whatever things you want
// to change in that other object
}
// or simply accessing or setting a variable
iii.x += 16;
So again, Yes instance_change IS a good practice if your goal is to destroy the current object and create a different object at this exact location.
Hope this answers a bit because I find the question a bit confusing, or at least, lacks some details.