Just want to follow up on our in-person discussion of this yesterday.

It's not so much whether deepcopy should be used because anything is *currently* mutating the elements of the list, but whether you should use deepcopy to ensure that that doesn't accidentally happen in the future.  deepcopy simply reflects the actual semantics better.

Also, note that you've made this change in three places, and there is nothing preventing someone from making the same mistake in the future.  To make it DRYer and avoid the potential for any more mistakes, you could always add a function in corehq.elastic like get_ADD_TO_ES_FILTER() that just returns a different dict instance each time.