'Return a copy of the current instance.
If ``data`` is supplied then a view (reference) of ``data`` is used,
and ``copy_data`` is ignored.
Parameters
order : {\'C\', \'F\', \'A\', \'K\'}, optional
Controls the memory layout of the copy. \'C\' means C-order,
\'F\' means F-order, \'A\' means \'F\' if ``a`` is Fortran contiguous,
\'C\' otherwise. \'K\' means match the layout of ``a`` as closely
as possible. (Note that this function and :func:numpy.copy are very
similar, but have different default values for their order=
arguments.)  Default is \'C\'.
data : array, optional
If supplied then use a view of ``data`` instead of the instance
data.  This allows copying the instance attributes and meta.
copy_data : bool, optional
Make a copy of the internal numpy array instead of using a
reference.  Default is True.
Returns
col : Column or MaskedColumn
Copy of the current column (same type as original)'

def copy(self, order=u'C', data=None, copy_data=True):

    if (data is None):
        data = self.data
        if copy_data:
            data = data.copy(order)
    out = data.view(self.__class__)
    out.__array_finalize__(self)
    if isinstance(self, MaskedColumn):
        out._mask = data._mask
    self._copy_groups(out)
    return out
