def linear_namespace_from_sequence(cls, data, copy=True):
    """
    Create a new linear space from a sequence

    If a list is given, and copy=False, it will be reused as data.

    >>> Point = linear_namespace('Point', ['x', 'y'])
    >>> linear_namespace_from_sequence(Point, [1, 2])
    """
    data = list(data)
    if len(data) != len(cls._fields):
        n = len(cls._fields)
        raise ValueError('expected a sequence with %s paramenters' % n)
    new = object.__new__(cls)
    new._data = list(data) if copy or type(data) is not list else data
    return new
