Think of a snapshot as a point in time that you have preserved. More formally, a snapshot consists of the following:
The snapshot contains a complete copy of the VM settings, including the hardware configuration, so that when you restore a snapshot, the VM settings are restored as well. For example, if you changed the hard disk configuration or the VM's system settings, that change is undone when you restore the snapshot.
The copy of the settings is stored in the machine configuration, an XML text file, and thus occupies very little space.
The complete state of all the virtual disks attached to the machine is preserved. Going back to a snapshot means that all changes that had been made to the machine's disks, file by file and bit by bit, will be undone as well. Files that were since created will disappear, files that were deleted will be restored, changes to files will be reverted.
Strictly speaking, this is only true for virtual hard disks
in "normal" mode. You can configure disks to behave
differently with snapshots, see
Creating the differencing image as such does not occupy much space on the host disk initially, since the differencing image will initially be empty and grow dynamically later with each write operation to the disk. The longer you use the machine after having created the snapshot, however, the more the differencing image will grow in size.
If you took a snapshot while the machine was running, the memory state of the machine is also saved in the snapshot. This is in the same way that memory can be saved when you close a VM window. When you restore such a snapshot, execution resumes at exactly the point when the snapshot was taken.
The memory state file can be as large as the memory size of the VM and will therefore occupy considerable disk space.