파이썬에서는 객체를 가변(mutable)객체와 불변(immutable)객체로 구분할 수 있습니다. 객체의 가변성 여부는 객체의 값이 변경 가능한지 여부를 의미합니다.
1. 불변 객체(Immutable Objects)
불변 객체는 생성 후에는 그 값을 변경할 수 없는 객체입니다. 즉, 한 번 생성된 값은 변경되지 않습니다. 불변 객체의 대표적인 예시로는 숫자(int, float), 문자열(str), 튜플(tuple) 등이 있습니다.
다음은 문자열을 예시로 들어보겠습니다. 문자열은 변경이 불가능하기 때문에, 한 번 생성된 문자열은 값이 변경되지 않습니다. 예를 들어, 다음과 같은 코드에서 s의 값이 변경되지 않습니다.
s = 'hello'
s[0] = 'H' # TypeError 발생
위 코드에서 s[0] = 'H' 라인에서 TypeError가 발생합니다. 이는 문자열은 불변 객체이기 때문입니다.
불변 객체는 다음과 같은 특징을 가집니다.
- 값이 변경되지 않기 때문에 안전하게 공유될 수 있습니다.
- 다른 객체와 구별될 수 있는 고유한 값을 가집니다.
- 해싱(Hashing)이 가능합니다. 해싱은 값을 고유한 정수로 매핑하는 기능입니다. 이는 딕셔너리나 셋(Set) 같은 컨테이너 객체에서 사용됩니다.
2. 가변 객체(Mutable Objects)
가변 객체는 생성 후에도 값이 변경될 수 있는 객체입니다. 대표적인 가변 객체로는 리스트(list), 딕셔너리(dict), 집합(set) 등이 있습니다.
가변 객체는 값이 변경될 수 있기 때문에 다음과 같은 특징을 가집니다.
- 값이 변경될 수 있기 때문에 공유되면 안전하지 않습니다.
- 가변 객체는 고유한 값을 가지지 않습니다. 예를 들어, 빈 리스트를 생성하고 값을 변경한 뒤 다시 빈 리스트를 생성하면 두 리스트는 서로 다른 객체입니다.
- 해싱이 불가능합니다. 따라서 딕셔너리나 셋(Set) 같은 컨테이너 객체에서는 사용할 수 없습니다.
다음은 리스트를 예시로 들어보겠습니다. 리스트는 값이 변경될 수 있는 가변 객체이기 때문에, 한 번 생성된 값은 변경될 수 있습니다.
lst = [1, 2, 3]
lst[0] = 4 # lst의 값이 [4, 2, 3]으로 변경됨
위 코드에서 lst[0] = 4 라인에서 리스트의 값이 변경됩니다. 이는 리스트가 가변 객체이기 때문입니다.
3. 복습
다음은 리스트와 튜플, 딕셔너리의 가변성 여부에 대한 예제입니다.
1) 리스트(List)
리스트는 가변 객체이기 때문에, 생성 후에도 값이 변경될 수 있습니다. 예를 들어, 다음과 같은 코드에서 lst의 값을 변경할 수 있습니다.
lst = [1, 2, 3]
lst[0] = 4 # lst의 값이 [4, 2, 3]으로 변경됨
2) 튜플(Tuple)
튜플은 불변 객체이기 때문에, 생성 후에는 값이 변경될 수 없습니다. 예를 들어, 다음과 같은 코드에서 tpl의 값을 변경할 수 없습니다.
tpl = (1, 2, 3)
tpl[0] = 4 # TypeError 발생
3. 딕셔너리(Dictionary)
딕셔너리는 가변 객체이기 때문에, 생성 후에도 값이 변경될 수 있습니다. 예를 들어, 다음과 같은 코드에서 dct의 값을 변경할 수 있습니다.
dct = {'a': 1, 'b': 2, 'c': 3}
dct['a'] = 4 # dct의 값이 {'a': 4, 'b': 2, 'c': 3}으로 변경됨
위 예제들을 통해 리스트, 튜플, 딕셔너리의 가변성 여부를 알아보았습니다. 이러한 객체의 가변성 여부를 이해하는 것은 객체의 값이 변경될 수 있는지 여부를 파악하는 데 도움이 됩니다.
'개념' 카테고리의 다른 글
[파이썬] DFS 구현 (0) | 2023.03.11 |
---|---|
[파이썬] namedtuple 이란 (0) | 2023.03.11 |
파이썬(Python)의 인자목록 언패킹(unpacking) 에 대해서 (0) | 2023.03.05 |
파이썬(Python)의 임의의 인자목록(variadic arguments) 에 대해서 (0) | 2023.03.05 |
파이썬(Python)의 키워드 인자(keyword arguments) 에 대해서 (0) | 2023.03.04 |