Hi Lisa,
As you found out, Individual list are not hashable. However, it is possible to define a __hash__ method for the class Individual.
I have written a simple example that illustrates how :
This makes the hash function dynamic. The modification of the individual will change its hash, but Python do not recompute the hash of each element in the set as it is supposed to be a constant. Therefore before modifying an individual, remove it from the set, or simply use the set as a temporary storage when doing crossover and mutation, then convert the population to a list for the rest of the operations.
Feel free to ask more questions as I might have left some imprecisions.