Python
[Python] Equivalent vs Identical, 객체와 참조 이해하기
S.H. Yoo
마지막 업데이트: 2025-12-24
1. Equivalent vs. Identical: 객체와 값 비교
Python에서 equivalent와 identical은 객체를 비교하는 두 가지 서로 다른 관점입니다.
- Equivalent(동등): 두 객체의 값(value) 이 같은 경우
- Identical(동일): 두 변수가 메모리 상의 동일한 객체(object) 를 가리키는 경우
이를 위해 Python은 두 가지 연산자를 제공합니다.
==: 값이 같은지(equivalent) 비교is: 같은 객체인지(identical) 비교
예시 코드
list_one = [7, 14, 21]
list_two = [7, 14, 21]
print(list_one == list_two) # True
print(list_one is list_two) # False
위 코드에서 list_one과 list_two는
내용이 동일하므로 equivalent 하지만,
서로 다른 메모리 공간에 생성된 리스트이므로 identical 하지는 않습니다.
즉,
- 값 기준 비교 →
== - 객체 기준 비교 →
is
라는 점을 명확히 구분해야 합니다.
2. 객체(Object), 참조(Reference), 그리고 Aliasing
객체와 참조
- 객체(Object): 메모리에 저장된 실제 데이터
- 참조(Reference): 객체를 가리키는 변수 이름
하나의 객체를 여러 변수가 동시에 가리킬 수 있는데,
이를 Aliasing 이라고 합니다.
예시 코드
scores = [80, 90, 100]
backup_scores = scores
backup_scores.append(70)
print(scores) # [80, 90, 100, 70]
여기서 중요한 점은,
scores와backup_scores는 서로 다른 리스트가 아님- 같은 리스트 객체를 동시에 참조하고 있음
리스트는 mutable(변경 가능) 객체이기 때문에,
한 참조를 통해 변경하면 동일한 객체를 가리키는 다른 참조에서도 변경 결과가 그대로 보입니다.
이처럼 하나의 객체에 여러 이름이 붙어 있는 상태를 Aliasing이라고 하며,
의도하지 않은 데이터 변경(side effect)을 유발할 수 있으므로 주의가 필요합니다.
3. 리스트를 수정하는 함수 예제
Python에서 함수를 호출할 때,
리스트와 같은 mutable 객체는 객체의 복사본이 아니라 참조(reference) 가 전달됩니다.
예시 함수
def apply_bonus(points, bonus):
for i in range(len(points)):
points[i] += bonus
grades = [60, 70, 80]
apply_bonus(grades, 5)
print(grades) # [65, 75, 85]
동작 설명
grades: 함수 호출 시 전달되는 argumentpoints: 함수 정의에서 사용하는 parameter- 두 변수는 같은 리스트 객체를 참조
따라서 함수 내부에서 리스트를 수정하면,
호출한 쪽에서도 변경된 결과가 그대로 반영됩니다.
이 예제는 다음 개념들이 어떻게 연결되는지를 잘 보여줍니다.
- arguments와 parameters
- 객체(object)와 참조(reference)
- mutable 객체의 부작용
References
Downey, A. B. (2015). Think Python: How to Think Like a Computer Scientist (2nd ed.). Green Tea Press.
https://thinkpython.com
마지막 업데이트: 2025-12-24