code: func (c *CMSketch) Copy() *CMSketch {
  	if c == nil {
  		return nil
  	}
  	tbl := make([][]uint32, c.depth)
  	for i := range tbl {
  		tbl[i] = make([]uint32, c.width)
  		copy(tbl[i], c.table[i])
  	}
  	var topN map[uint64][]*TopNMeta
  	if c.topN != nil {
  		topN = make(map[uint64][]*TopNMeta)
  		for h1, vals := range c.topN {
  			newVals := make([]*TopNMeta, 0, len(vals))
  			for _, val := range vals {
  				newVal := TopNMeta{h2: val.h2, Count: val.Count, Data: make([]byte, len(val.Data))}
  				copy(newVal.Data, val.Data)
  				newVals = append(newVals, &newVal)
  			}
  			topN[h1] = newVals
  		}
  	}
  	return &CMSketch{count: c.count, width: c.width, depth: c.depth, table: tbl, defaultValue: c.defaultValue, topN: topN}
  }
docs: // Copy makes a copy for current CMSketch.