Upon any access to a zarr array, zarr will read the entirety of chunks "touched" by the user-specified selection. Zarr will return the user-specified selection, and then "throw away" (discard from memory) the bytes that were originally read into memory. So if you loop over a zarr array like in my example, you will never read the entire array into memory; only the chunks of the data that your accesses touch will ever be in memory. So if your slicing is always constrained to 1 chunk, only 1 chunk will ever be held in memory at a time.