파이썬은 모든 것이 객체다. 그렇다면 객체의 종류별로 가변/불변인 것들은 무엇이 있을까?
가변객체
파이썬에서 list, set, dict 자료형 객체를 제외하고는 모두 불변(Immutable)객체이다.
int 객체를 예를 들어보면 1 이라는 객체와 그 객체를 참조하는 a, b 변수는 모두 동일한 값을 가리키고 있다. 1 객체의 값이 2로 변경되지 않는 한 a, b가 참조하는 객체는 변하지 않는다. a = 2 로 객체 변경이 일어난 것이 아니라 a의 참조가 변경되었을 뿐이다.
가변형 list, 불변형 tuple
가장 많이 사용되는 자료형중에 리스트와 튜플이 있다. 둘의 차이는 불변 여부이다. 튜플은 불변형이라 생성시 설정한 값을 변경할 수 없다.
리스트의 경우 객체의 값이 변경이 가능하기 때문에 위 예시처럼 a 변수에 담긴 리스트의 값을 변경하면 해당 값을 참조하는 b 의 값도 변경된 것 처럼 보인다. 하지만 실제로는 동일한 객체이다.
튜플의 경우엔 생성시 사용한 값을 변경할 수 없다. 변경하려 하면 그럴 순 없다며 에러를 뿜는다.