code: func (s *Snapshot) copy() *Snapshot {
  	cpy := &Snapshot{
  		config:   s.config,
  		sigcache: s.sigcache,
  		Number:   s.Number,
  		Hash:     s.Hash,
  		Signers:  make(map[common.Address]struct{}),
  		Recents:  make(map[uint64]common.Address),
  		Votes:    make([]*Vote, len(s.Votes)),
  		Tally:    make(map[common.Address]Tally),
  	}
  	for signer := range s.Signers {
  		cpy.Signers[signer] = struct{}{}
  	}
  	for block, signer := range s.Recents {
  		cpy.Recents[block] = signer
  	}
  	for address, tally := range s.Tally {
  		cpy.Tally[address] = tally
  	}
  	copy(cpy.Votes, s.Votes)
  
  	return cpy
  }
docs: // copy creates a deep copy of the snapshot, though not the individual votes.