Difference between object matrix_world.translation and object.location in blender

I am quite new to blender, and this question is making me quite confused. In an animation with camera in blender, I select an object. Let’s say the object is called dog. dog.location is clearly the location of the dog in the world. However, I am confused about dog.matrix_world.translation. What is the definition dog.matrix_world.translation exactly, and how it is different from dog.location. Some of the objects have the same value for both, while others have different values.

Source: Python Questions