What is the difference between matrix_basis and matrix_world?
matrix_basis is the 'input' matrix, so it's the thing that you set as the 3D artist, so it's relative to the object's parent. matrix_world is the 'evaluated' matrix, so it basically is matrix_basis with all the constraints applied and is multiplied by all the parent matrices (so it's in world coordinates).