DATA GROUND 로고DATA GROUND
Python

[Python] Equivalent vs Identical, 객체와 참조 이해하기

S.H. Yoo
마지막 업데이트: 2025-12-24

Python에서 equivalent(동등)와 identical(동일)의 차이, 객체·참조·aliasing 개념, 그리고 리스트를 함수 인자로 전달할 때 발생하는 부작용을 정리합니다.

작성일: 2025-12-24작성자: S.H. Yoo마지막 업데이트: 2025-12-24

1. Equivalent vs. Identical: 객체와 값 비교

Python에서 equivalentidentical은 객체를 비교하는 두 가지 서로 다른 관점입니다.

  • 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_onelist_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]

여기서 중요한 점은,

  • scoresbackup_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 : 함수 호출 시 전달되는 argument
  • points : 함수 정의에서 사용하는 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