from copy import deepcopy

class Gene:

    def __init__(self, value):
        """Initialize a gene with the input value."""

        # Copy another gene
        try:
            self.value = deepcopy(value.value)

        # Otherwise copy the given value
        except:
            self.value = deepcopy(value)


    def __eq__(self, other_gene):
        """Comparing two genes by their value."""
        return self.value == Gene(other_gene).value


    def __repr__(self):
        """
        Allows the user to use
                gene_string = repr(gene)
                gene_data   = eval(gene_string)
                gene        = ga.make_gene(gene_data)
        to get a backend representation of the gene.
        """
        return repr(self.value)


    def __str__(self):
        """
        Allows the user to use
                str(gene)
                print(gene)
        to get a frontend representation of the gene.
        """
        return f'[{str(self.value)}]'
