파이썬은 모든 것이 객체(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

+ Recent posts