From solidity docs (https://docs.soliditylang.org/en/v0.8.4/types.html#data-location ) -
Every reference type has an additional annotation, the “data location”, about where it is stored. There are three data locations: memory, storage and calldata. Calldata is a non-modifiable, non-persistent area where function arguments are stored, and behaves mostly like memory.
Further down in the docs it says this:
Assignments from storage to a local storage variable also only assign a reference.
What is local storage
? How is it different from storage
Before you close this down as duplicate , I have read the other answers and none of them answer this comprehensively .