'Returns a new Datasheet from a selective list of row and/or column indices.'

def copy(self, rows=ALL, columns=ALL):

    if ((rows == ALL) and (columns == ALL)):
        return Datasheet(rows=self)
    if (rows == ALL):
        return Datasheet(rows=zip(*(self.columns[j] for j in columns)))
    if (columns == ALL):
        return Datasheet(rows=(self.rows[i] for i in rows))
    z = zip(*(self.columns[j] for j in columns))
    return Datasheet(rows=(z[i] for i in rows))
