본문 바로가기
Python/이론 및 용어

파이썬은 모든 요소가 객체다 (list, dict 제외)

by tokkiC 2022. 7. 19.

파이썬은 객체 지향을 강화해서인지 모든 요소(변수)가 다 객체로서 성립한다

a=b 의 경우 c언어 등의 경우에서는 call by value 로 값을 복사해서 할당하지만

파이썬의 경우는 a b가 모두 같은 주소 값의 '객체'를 가리키므로 얘기가 좀 다르다

a b 중 하나가 변화가 있으면 객체를 수정하는게 아니라 객체를 새로 생성해서

새 객체를 만들어 주소값도 바뀌게 된다

이때 이전 주소의 객체를 가리키던 변수는 이전 객체를 그대로 가리키고

수정하려 한 변수는 새로 만든 변수를 가리키게 된다

 

a = 'tokki'     >> a 주소값 100
b = a             >> b 주소값 100. a와 같은 객체를 가리킨다
a = a + 'ssi'   >> a 주소값 400 에 새로 만든 'tokkissi' 객체를 가리킨다. 이는 수정이 아니며 이전 주소값과 다르다
                     >> b 는 여전히 주소값 100의 'tokki' 객체를 가리키고 있다

파이썬의 일.반.적.인 배열 딕셔너리는 제외 자료형은 모두 객체이므로 연속된 인덱스를 통한 수정은 불가하고
replace 메소드등을 써서 수정된 값을 갖는 새로운 객체를 만들어야만 한다

 

하지만 파이썬에서 배열 array 을 담당하는 리스트 list 해시 맵 hash map 을 담당하는 딕셔너리 dict 의 경우는

새 요소가 추가될때마다 연속된 데이터를 정해진 주소값에 붙여서 이어 나가기 때문에

이 둘은 객체가 유지되어 인덱스로 접근해서 바로 할당하여 수정이 가능하다

이처럼 객체를 새로 생성하지 않고 수정이 가능한 자료형들을 mutable 변화할 수 있는 이라 한다

numbers = [1, 2, 3]
numbers[2] = 100
===>> number = [1 2 100]  주소값은 그대로. 새 객체 만들지 않음

 

리스트와 딕셔너리 외 모든 자료형은 객체 재생성 없이 수정이 불가능하며 immutable 변화할수없는 이라 한다

>> 이 둘 외에 다른 자료형의 경우는 아래처럼 인덱스로 할당하여 값을 수정하려 할 시 에러가 발생한다

words = 'connect foundation'   
words[7] = '&' 
===>> error!

모두의 파이썬 듣는 분들은 참고하시길

 

댓글