1. 파이썬의 객체
파이썬은 다양한 종류의 객체를 지원합니다. 파이썬의 객체는 수정 가능한 타입과 수정 불가능한 두 가지 타입으로 분류 할 수 있습니다. 오늘은 수정 불가능한 객체인 immutable 과 수정 가능한 객체인 mutable에 대하여 알아보도록 하겠습니다.
2. Mutable 객체란?
Mutable 객체는 생성된 후에도 상태나 값이 변경될 수 있는 객체 입니다. 이 객체는 메모리에 할당된 후에도 내용을 변경하거나 업데이트 할 수 있습니다.
가변 객체 (Mutable Objects)
- 가변 객체는 생성된 후에도 그 상태를 변경할 수 있습니다.
- 가변 객체에는 list, dict, set 와 같은 타입의 객체가 있습니다.
- 가변 객체를 수정하면, 메모리의 동일한 주소에 있는 객체가 변경됩니다.
mutable - 변경되는 객체, 상태를 변경할 수 있는 객체
3. mutable 객체는 어떤 것들이 있을까요?
mutable 객체에는 리스트(list), 딕셔너리(dict), 집합(set)등이 있습니다. 이들은 생성 후에도 내용이 변경 될 수 있으며 이는 더 큰 유연서을 제공하지만, 원치 않는 변경으로 인한 버그의 위험도 존재합니다.
예시) 아래 예시에서 number_list에 요소를 추가해도 number_list의 id 값은 변하지 않습니다.
number_list = [1, 2, 3]
print(id(number_list)) # 예: 140353439954688
number_list.append(4)
print(id(number_list)) # 예: 140353439954688
4. immutable 객체란?
immutable 객체는 한번 생성되면 그 상태를 변경할 수 없는 객체를 의미합니다. 객체의 상태나 값이 변경되야할 경우 새로운 객체가 생성되며 기존 객체는 변경되지 않습니다. 이 특성은 데이터의 불변성과 안정성을 보장합니다.
불변 객체 (Immutable Objects)
- 불변 객체는 생성된 후에 그 상태를 변경할 수 없습니다.
- 불변 객체에는 정수(int), 실수(float), 문자열(str), 튜플(tuple)등이 존재합니다.
- 불변 객체에 대한 어떤 변경 시도도 새로운 객체의 생성을 초래하며, 기존 객체는 변하지 않습니다.
immutable - 변경되지 않는 객체, 상태를 변경할 수 없는 객체
5. immutable 객체는 어떤 것들이 있을까요?
immutable 객체로는 정수(int), 실수(float), 문자열(str), 튜플(tuple)등이 있습니다. 이러한 객체들은 메모리에 한번 할당이 되면 그 상태가 변경되지 않습니다.
예시 1) 아래 예시에서 문자열 'msg' 가 변경 되었을 때, 새로운 문자열 객체가 생성되고 'msg'는 새로운 객체를 참조하게 됩니다.
msg = "hello"
print(id(msg)) # 예: 140353439961088
a = "hello world"
print(id(msg)) # 예: 140353439962032
예시 2) a라는 변수에 "python"이라는 문자열을 할당하고 동일한 변수에 다른 문자열을 할당하여 두 객체의 id 고유값을 확인 해보겠습니다.
>>> a = "python"
>>> id(a)
4333318128
>>> a = "python3"
>>> id(a)
4332290288
예시 3) 같은 a라는 변수지만 두 객체의 고유값은 다릅니다. 다음 예제도 보도록 하겠습니다
>>> a = 3
>>> id(a)
4340082560
>>> a = 4
>>> id(a)
4340082592
6. 끝으로... "주저리 주저리.."
자료 검색을 좀 하다보니 이런건 몰라도 파이썬으로 개발하는데 지장이 없다라는 글을 보았습니다. 하지만 그건 어떤 업무에 사용 하느냐에 따라다르다고 생각합니다. 동료들과 일을 하다보면 가끔 프로그래밍의 기본적인 것들을 몰라도 가볍게 지나가는 경우가 많다고 느낌니다. 또 한 자바와 비교하기도 합니다. 파이썬의 직관적인 문법과 많은 라이브러리, 메모리에 대한 추상화로 인해 쉽게만 느껴질 수 있습니다. 하지만 이건 파이썬의 특징 중 일부일 뿐입니다. 파이썬은 유연성과 충분한 깊이를 가지고 있고 다른 언어와 마찬가지로 프로그래밍에 대한 규약, 코드의 최적화, 오류 처리, 메모리 관리등에 이해를 필요로 하는 고품질의 소프트웨어를 개발하는데 부족함이 없는 언어입니다.
언어는 언어일 뿐 입니다. 언어의 선택은 프로젝트의 요구사항, 성능에 대한 니즈, 개발팀의 숙련도 등 다양한 요소를 고려하여 선택됩니다.
이상 주저리주저리 였습니다 ㅎㅎ
'파이썬(python) 기본' 카테고리의 다른 글
파이썬 클래스: 메타 클래스와 동적 클래스 생성 (0) | 2023.08.16 |
---|---|
파이썬 가비지 컬렉션: 메모리 관리의 핵심, 참조 카운트 (0) | 2023.08.16 |
파이썬 기초: 네임스페이스와 스코프 이해하기 (0) | 2023.08.16 |
파이썬 파일 다루기: 입출력과 파일 처리 기초 (0) | 2023.08.16 |
파이썬 내장 함수, 표준 라이브러리: 다양한 내장 함수와 라이브러리 (0) | 2023.08.14 |