파이썬은 모든 것이 객체(Object)이어서, 그 속성이 mutable(가변) 과 immutable(불변)으로 구분된다.
mutable - 변경되는 객체 (객체의 상태를 변경할 수 있음)
immutable - 변경되지 않는 객체 (객체의 상태를 변경할 수 없음
변경이 되는 mutable 객체의 종류는 list, set, dictionary 정도가 있고
변경이 되지 않는 immutable 객체의 종류는 int, float, tuple, str, bool 이 있습니다.
이러한 개념을 잘 이해해야하는 이유는 깊은복사와 얕은복사를 이해하는데 필수적이기 때문이다. 파이썬에서는 immutable 객체의 값이 같은 경우에 변수에 상관없이 동일한 곳을 참조합니다. mutable (값이 변경될 수 있는) 객체의 경우에는 모든 객체를 각각 생성해서 참조해 줍니다.
mutable(가변)
Mutable 데이터 타입
- 사용자 정의 객체
- list
- dictionary
- set
## List
>>> a = [1,2] #a = [1,2]
>>> id(a)
1985209849032
>>> a.append(3) #a = [1,2,3]
>>> id(a)
1985209849032
## Dict
>>> a = {1:'a'} #a = {1:'a'}
>>> id(a)
1985209931096
>>> a[2] = 'b' #a = {1:'a', 2:'b'}
>>> id(a)
1985209931096
mutable에 속한 객체들은 값이 변경될 때 객체 값도 변경되는 것을 확인할 수 있다.
## List
>>> a = [1,2]
>>> b = a #b = [1,2]
>>> a == b #a = [1,2] , b = [1,2]
True
>>> b.append(3) #b = [1,2,3]
>>> a == b #a = [1,2,3] , b = [1,2,3]
True
## Dict
>>> a = {1:'a'}
>>> b = a #b = {1:'a'}
>>> a == b #a = {1:'a'} , b = {1:'a'}
True
>>> b[2] = 'b' #b = {1:'a',2:'b'}
>>> a == b #a = {1:'a',2:'b'} , b = {1:'a',2:'b'}
True
mutable 객체들은 값이 변경될 때 주소가 참조하는 값도 변경되는것을 확인할 수 있었다.
immutable(불변)
Immutable 데이터 타입
- int
- float
- demical
- bool
- string
- tuple
- range
## Int
a = 1 #1
>>> id(a)
140729439544144
>>> a += 1 #2
>>> id(a)
140729439544176
## String
a = 'a' #a
>>> id(a)
1985199052704
>>> a += 'b' #ab
>>> id(a)
1985209620944
## Tuple
>>> a = (1,2) #(1,2)
>>> id(a)
1985209935624
>>> a += (3,) #(1,2,3)
>>> id(a)
1985209858448
immutable 에 속한 객체들은 값이 변경이될떄 객체가 변하는것을 확인 할 수 있습니다. 여기에 속한 객체들은 call by value 의 속성을 띄고있습니다.
## Int
>>> a = 1
>>> b = a #b = 1
>>> a == b #a = 1 , b = 1
True
>>> b += 1 #b = 2
>>> a == b #a = 1 , b = 2
False
## String
>>> a = 'a'
>>> b = a #b = 'a'
>>> a == b #a = 'a' , b = 'a'
True
>>> b += 'b' #b = 'ab'
>>> a == b #a = 'a' , b = 'ab'
False
## Tuple
>>> a = (1,2)
>>> b = a #b = (1,2)
>>> a == b #a = (1,2) , b = (1,2)
True
>>> b += (3,) #b = (1,2,3)
>>> a == b #a = (1,2) , b = (1,2,3)
False
immutable 객체들은 값이 변경되는것이 새로운 객체로생성이 되기떄문에 변경이 일어날떄 기존 객체는 변하지 않습니다.
'Python 프로그래밍' 카테고리의 다른 글
[Python] Future (0) | 2022.06.01 |
---|---|
[Python] Object Reference (0) | 2022.05.27 |
[Programming] 암호화 알고리즘 (Encryption Algorithms) (0) | 2022.05.22 |
[Python(Web)] Robots.txt (1) | 2022.05.21 |
[Python] Decorator (0) | 2022.05.20 |