def unique(seq):
    """Remove duplicates from a list in Python while preserving order.
    
    :param seq: a python list object.
    :return: a list without duplicates while preserving order.
    
    """    

    seen = set()
    seen_add = seen.add
    """
    The fastest way to sovle this problem is here
    Python is a dynamic language, and resolving seen.add each iteration 
    is more costly than resolving a local variable. seen.add could have 
    changed between iterations, and the runtime isn't smart enough to rule 
    that out. To play it safe, it has to check the object each time.   
    """

    return [x for x in seq if x not in seen and not seen_add(x)]