def shift_row(matrix):
    """
    This function is used for AES encryption. The first row is unchanged; The bytes in second, third and forth row are
    shifted over one, two and three bytes to the left respectively.

    :param matrix: A 4x4 matrix which composed by 4 lists. The lists only accept numeric objects.
    :return: A new matrix which be changed follow the ShiftRow rule. The format of this matrix is same as the input
             matrix.
    """
    new_matrix = [matrix[0], [], [], []]
    row_num_offset = -1
    for row in matrix[1:]:
        position_tag = -4
        new_row = row.copy()
        for byte in row:
            new_row[position_tag + 4 + row_num_offset] = byte
            position_tag += 1
        new_matrix[position_tag - row_num_offset] = new_row
        row_num_offset -= 1
    return new_matrix