불변(변경불가능한)객체이다. 일반적인 자료형 int, string과 튜플이 있다. immutable에 속한 객체들은 값이 변하면 객체도 함께 변한다.
>>> # int
>>> a = 1 #1
>>> id(a)
4315400864
>>> a = a + 1 #2
>>> id(a)
4315400896
>>> # string
>>> a = 'a' #'a'
>>> id(a)
4318774896
>>> a = a + 'b' #'ab'
>>> id(a)
4316966704
>>> # tuple
>>> a = (1, 2) #(1,2)
>>> id(a)
4320987264
>>> a = a + (3,) #(1,2,3)
>>> id(a)
4321012800
call by value의 속성을 가지고 있다.
call by value
인자로 받은 값을 복사하여 사용.
장점 - 복사하여 처리하기 때문에 원래의 값이 보존되어 안전하다
단점 - 메모리 사용량이 늘어난다
가변(변경가능한)객체이다. 리스트와 딕셔너리 등이 있다. 값의 변경이 일어날 때 객체의 값도 변경된다.
>>> # list
>>> a = [1, 2] # [1, 2]
>>> id(a)
4321008064
>>> a.append(3) # [1, 2, 3]
>>> id(a)
4321008064
>>> # dict
>>> a = {1:'a'} # {1:'a'}
>>> id(a)
4338337920
>>> a[2] = 'b' # {1:'a', 2:'b'}
>>> id(a)
4338337920
call by reference 의 속성을 가지고 있다.
call by reference
인자로 받은 값의 주소를 참조하여 처리.
장점 - 복사를 하지 않기 때문에 빠르다
단점 - 직접 참조를 하기 때문에 원래 값이 영향을 받는다