파이썬의 객체 대부분은 가변 객체이며 모든 객체는 참조를 통해 접근해야 합니다. 문자열, 숫자, frozenset과 같은 불변 객체는 동등성(equality)이나 부등성(inequality)을 비교할 때 그 객체들의 동일성(identity)에 대해 걱정할 필요가 거의 없습니다. 하지만 가변 컬렉션과 같은 가변 객체는 동등성과 동일성을 구별하는 것이 매우 중요합니다.
많은 프로그래밍 언어는 값으로 전달(pass by value), 주소로 전달(pass by address), 참조로 전달(pass by reference)을 구분해서 사용하고 있으며 가끔 이름으로 전달(pass by name)하는 방식도 사용합니다. 파이썬은 그중에서 참조로 전달과 가장 유사하게 동작하지만 객체 참조로 전달(pass by object reference)이라는 용어를 통해 의미를 더욱 구체적으로 강조하고 있습니다. 파이썬은 철저히 객체 지향인 언어로서 객체의 존재 범위와 무관하게 항상 객체를 캡슐화(encapsulation)합니다. 따라서 함수에 전달되는 것은 다른 언어처럼 값, 메모리 주소, 변수 이름이 아니라 항상 객체 그 자체입니다.
이때 함수(function)나 메서드(method)에 전달된 객체가 불변인지 여부를 고려하는 것이 중요합니다. 만약 전달된 객체가 불변이라면 호출 범위 안에서도 객체가 변형되지 않기 때문에, 다른 언어에서의 값으로 전달과 마찬가지로 동작합니다. 객체의 구체적인 이름은 전달 과정에서 달라질 수 있지만 객체 자체는 동일하게 유지됩니다. 하지만 전달된 객체가 가변이라면 하위 범위(child scope)에서 변형이 일어날 수 있으며, 호출 범위(calling scope) 또는 프로그램의 실행 시간 내 어디서든 객체가 변형될 수 있습니다.