When we originally coded this up we passed around a query set.  This was more efficient, as you said, since you would only have to instantiate user objects that were needed per batch, instead of all at once here.

But this is a good observation, @cpennington, that we should be careful that we can actually execute this query without hitting memory limits on 

Also: if we're going to the trouble to actually get all this data, then we should probably build a dict for the values that we will need for each user here and actually pass that along in the batch.  I believe the four fields we will need are just name, email address, optout flag, and optout code.