Start here. This is the direct spoken answer to practice first.
Overview
A default list that remembers earlier calls is one of Python's most common production surprises because the function owns one reused object.
Python evaluates default argument expressions when the function is defined, not each time it is called. A default such as items=[] therefore creates one list reused by every call that omits the argument. If the function appends to it, later callers see earlier state. The usual fix is a non-mutable sentinel such as None, followed by items = [] inside the function when no value was supplied.