Today I Learned/Python & Pandas

(파이썬 자료형) 가변 객체 & 불변 객체

하나719 2023. 8. 21. 21:08
반응형

파이썬은 모든 것이 객체이다. 

자료형 또한 객체로 되어 있는데, 크게 가변 객체와 불변 객체로 나뉜다.

 

클래스 설명 불변 객체 
bool 부 울 o
int 정수 o
float 실수 o
list 리스트 x
tuple 튜플 o
str 문자 o
set 집합 x
dict 딕셔너리 x

불변 객체

파이썬은 모든게 객체로 실제로 int , bool, str등의 값을 가지고 있는 객체는 변하지 않고 변수는 참조일 뿐이다.

아래 예시를 보면, 

1. a는 숫자 10을 참조

2. b는 a를 참조

-> 10, a, b 모두 메모리 상의 객체 주소가 동일한 것을 알 수 있다. 

(+) 주의할 점 

b = 12 로 재 참조했을 때, b의 주소는 숫자 12의 주소와 같아지지만 여전히 a는 10 객체주소를 참조하고 있다. 

이렇게 한번 생성된 int 형의 10, 12는 변하지 않고 참조하는 변수가 가리키는 주소만 변할 뿐이다. 

동일하게 문자열의 경우도 불변 객체로, 아래처럼 문자열을 강제로 수정하려고 하면 오류가 발생한다. 

위에처럼 문자열 특정 인덱스를 직접 바꾸려고 했을 때에 오류가 나지만, 아래처럼 문자열은 리스트처럼 [ : ] 인덱스로 접근이 가능하고 슬라이싱이 가능한데, 이렇게해서 수정했다고 생각할 수 있지만 새롭게 만들어지는 문자열은  새로운 객체로, 주소가 달라진다. 원본은 메모리상에서 변하지 않는다. 

가변 객체

리스트, 집합, 딕셔너리는 파이썬에서 가변 객체이다. 원본을 변경할 수 있다.

1. list의 특정 인덱스 값을 변경했을 때 물리적 주소가 변경되지않고 ,원본이 변경되어 출력됨

2. 리스트를 참조하는 다른 변수가 있을 때 참조하는 모든 리스트에 변경이 일어나고, 참조하는 모든 변수를 통해 원본 수정이 가능함 

  • a[3] = 1 -> a를 통해 리스트 원본을 수정하고 b로 출력했을 때 3번째 인덱스가 1로 변경되어 출력됨 
  • b[0] = 10 -> b 를 통해 리스트 원본을 수정하고 a 로 출력했을 때 동일하게 변경되어 출력 됨 

 

반응형