you can't get around not cloning state, part of the point of redux is that object references don't get reused, so you can do oldstate === newstate
and not have to do a deep comparison
only way to get that is by using a new object to get a new reference
not every property on the state object needs to be clone (e.g. it's a shallow clone) because each reducer either returns its previous state (so no clone) or a new object if there's been a change
so if you have 100 properties on the root state object and one key changes, oldstate !== newstate
, but oldstate['unchangedKey'] === newstate['unchangedKey']