Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 객체와 .NET 객체 비교: 참조 방식과 식별자의 차이 이해하기

.NET 객체의 기본 동작 방식

기본적으로 .NET의 모든 객체는 참조 형식(reference type)으로 동작합니다. 즉, 객체의 동등성(equality)과 해시 코드(hash code)는 해당 객체가 위치한 메모리 주소를 기준으로 결정됩니다.

또한 변수에 기존 객체를 할당하면 새로운 복사본이 만들어지는 것이 아니라, 단순히 그 메모리 주소를 가리키게 됩니다. 따라서 값비싼 복사 연산이 발생하지 않아 성능 면에서 효율적입니다.

흥미로운 점은 Python 객체 역시 일정 부분까지는 이와 유사한 방식으로 동작한다는 것입니다.

Python 객체의 핵심 속성

모든 Python 객체는 다음 두 가지 속성을 반드시 가집니다.

  • 고유한 식별자(identity): 정수 값이며, id(x) 함수로 확인할 수 있습니다.
  • 타입(type): type(x) 함수로 확인할 수 있습니다.

식별자와 타입은 변경할 수 없다

Python에서 객체의 식별자(identity)타입(type)은 한 번 정해지면 절대 변경할 수 없습니다. 이는 Python 언어 설계의 중요한 특징 중 하나입니다.

내용(content)의 변경 가능 여부

객체의 식별자와 타입은 불변이지만, 그 내용(content)은 객체에 따라 다릅니다.

  • 변경 가능한 객체(mutable): 리스트(list), 딕셔너리(dict), 집합(set)처럼 내용을 수정할 수 있으며, 이때에도 식별자와 타입은 그대로 유지됩니다.
  • 변경 불가능한 객체(immutable): 숫자, 문자열(str), 튜플(tuple)처럼 한 번 생성되면 내용을 바꿀 수 없습니다.

타입 객체(type object)의 역할

Python에서 타입 자체도 하나의 타입 객체(type object)로 표현됩니다. 이 타입 객체는 해당 타입에 속한 객체들이 어떻게 동작하는지에 대한 더 많은 정보를 담고 있으며, 객체 지향 시스템의 핵심적인 역할을 수행합니다.

정리

.NET과 Python 모두 객체를 참조 기반으로 다룬다는 공통점이 있지만, Python은 id()type()을 통해 명확하게 드러나는 불변의 식별자 체계를 가진다는 점에서 차이가 있습니다. mutable과 immutable 객체의 구분을 이해하면 두 언어의 객체 모델을 더 깊이 있게 파악할 수 있습니다.