Difference between BlockState and BlockSnapshot

What is the difference between BlockState and BlockSnapshot? In which cases use one, and in which the other. After all, both can be obtained and restored, and they are immutable.

So a BlockState is all the data of a block type. Such as rotation, color, state, etc.

While a blocksnapshot is a blockstate with the addition of location properties, meaning this can have all the data a Location<? extends Extent> in a ‘virtual’ enviroment meaning you have some TileEntity data.

You should use BlockSnapshot if you are storing a current block and needing to place it later and BlockState should be used for setting blocks in new locations.