#if key == var when self.domains[key].remove(color) is called,
#you change the size of the set you're currently iterating over.
#You can avoid this by using
for color in self.domains[var].copy():
#Using copy() will allow you to iterate over a copy of the set,
#while removing items from the original.