Lazy evaluation in Python delays the evaluation of expressions until their values are needed. It enables infinite data structures by lazily evaluating sequences, abstracts control structures using generators and generator expressions that follow the iterator protocol. Lazy evaluation provides performance benefits in both computation time and memory usage.