The data management will become differently once you decide to scale up your app and use multiple processes which is necessary for handling more than one callback at once (in the case of multiple users interacting with the app at once or multiple callbacks being fired at once). Modifications to your global data won’t persist across processes.
This is actually non-issue because the data isn’t shared across processes. If you want to share data across processes, and this isn’t recommended because of point 3 and point 4, you could use these multiprocessing objects https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes but these data structures are simple - you couldn’t share modifications with e.g. a pandas dataframe.
This doesn’t happen. Dash processes are shared across all users. A request can be handled by any of the available Dash processes. There is no concept of “sessions” on the backend. This allows Dash to scale really well: 2-4 dash processes could handle hundreds of simultaneous users (depending on the computations required in the callbacks), with each user’s “app state” stored in the user’s browser (instead of hundreds of separate session stores in the backend).
There is also
4. Multi-session case. If you modify a global variable in your session, then when you reload your page you will see the modified version of the variable instead of the initial value of the variable (and if there are multiple users, then point 3 applies - the next user might see your modifications instead of their modifications).