Empty.location VS Empty.matrix_world.to_translation()

can someone please explain why the location of an empty is different to the position row in the world matrix.

In my code i am trying to set the location of an armature based on a set of parented empties. Initially i tried to access the data as

bpy.data.objects[bone.name].location

This returns a vector which is the reported 3D location in the blender UI
After investigation, the above code returns the same as

Empty.matrix_basis.to_translation()

Can someone please explain why the location is relative to the basis (?) and is not the same in world coords?