code: def copy(self):
      M, N = self.shape
      new = self._lil_container(self.shape, dtype=self.dtype)
      # This is ~14x faster than calling deepcopy() on rows and data.
      _csparsetools.lil_get_row_ranges(
          M,
          N,
          self.rows,
          self.data,
          new.rows,
          new.data,
          range(M),
          0,
          N,
          1,
          N,
      )
      return new
  
imports: from bisect import bisect_left
  import numpy
  from ._matrix import spmatrix
  from ._base import _spbase, sparray, issparse
  from ._index import IndexMixin, INT_TYPES, _broadcast_arrays
  from ._sputils import getdtype, isshape, isscalarlike, upcast_scalar, check_shape, check_reshape_kwargs
  from .None import _csparsetools
label_desc: Use image node_id 30 for calling the _lil_base obj's underlying member method code with example usage: obj.copy() and returns: new