Start here. This is the direct spoken answer to practice first.
Overview
Python code becomes much easier to reason about once assignment is understood as binding a name to an object rather than copying a value into a typed box.
In Python, values are objects and a name refers to an object. Assignment binds or rebinds a name; it does not declare a fixed type for that name and it does not copy the object. After second = first, both names refer to the same object until one name is rebound. Every object has an identity, a type, and a value. Whether shared references are observable depends on the object: mutating a shared list is visible through both names, while an operation on an integer produces another object and rebinds a name.