python 자료형의 분류


 자료형

저장 모델 

변경 가능성 

접근 방법 

수치 형 

리터럴(scalar) 

불가 

직접 

문자열 

리터럴 

불가 

시퀀스 

튜플 

저장 

불가

시퀀스 

리스트 

저장 

가능 

시퀀스 

사전 

저장 

가능 

매핑(mapping) 






















자료형들을 구분하는 또 다른 중요한 구분 기준.

- 자료 값을 변경할 수 있는가? 이다.


변경할 수 있는 자료형을 '변경 가능하다(Mutable)' 고 하고, 그렇지 않은 자료형을 '변경 가능하지 않다(Immutable)' 고 한다. 


변경 가능한 자료형 - 리스트, 사전

변경 가능하지 않은 자료형 - 숫자, 문자열, 튜플




ex) >>> a = 1

>>> a = 2

이렇게 있다고 생각한다면...

결론부터 말해서 a는 숫자 2로 변경된 것이 아니다. 

1은 변경되지 않고 다만 a가 다른 객체(2)를 참조할 뿐이다.

※ python 에서는 객체와 이름은 별도로 관리된다. 이름에 직접 값이 저장되는 것이 아니고, 이름은 언제나 객체를 참조(Referencing) 하게 되어 있다.


a    --->    1    # a=1 한 후

a    --->    2    # a=2 한 후 ( 객체 1은 참조되지 않으므로 버려진다.)


결국, 숫자 객체 1은 값이 변경되지 않았다. 이름 a가 다른 객체를 참조한다. 이때 객체 1은 참조되지 않으므로 메모리에서 제거된다. 

즉, 이름에 의해 참조만 바뀌는 것.


ex) >>> L1 = [1,2]

>>> L2 = [3,4]

이것도 마찬가지로 이름에 의해 참조만 바뀌는 것이다. 

그러나 객체 내부의 값을 변경할 때에, 리스트는 값을 변경할 수 있다.


즉, 어떠한 이름으로 객체 전체를 바꾸는 것은 객체 전체를 변경하는 것이 아니며, 새로운 객체를 할당하는 것이다.


객체 변경의 의미는? 객체 내부의 값을 변경할 수 있는가이다.





python의 이름이라는 것이 c/c++의 포인터와 참조자의 개념과 정말 똑같다. 이름(변수)를 포인터 혹은 참조자라고 인식하면 될 것 같다.

Posted by scii
:

리스트

[]를 사용하는 리스트는 임의의 객체를 저장하는 집합적 자료형이다. 각 자료는 순서를 가지고있고 순서에 따라 접근 가능하다.


리스트는 메쏘드(객체 함수)를 가진다.




튜플

()를 사용하는 튜플도 문자열과 리스트와 유사한 특정을 가진다.


튜플과 리스트의 차이라면, 튜플은 값의 변경이 안 되고, 리스트는 가능하다는 것이다.


또한, 리스트는 다양한 메쏘드를 가지지만, 튜플은 그렇지 않다.




사전

사전은 옵셋이 아닌 키를 사용하여 값을 얻는 자료 구조이다. 이것은 사상 함수와 같은 역할을 한다. 

함수 f는 f:x -> y와 같이 x를 y로 사상시킨다. 사전의 역할이 이와 동잃다. 사전에 x라는 키(key)를 주면 값 y를 돌려준다.

또한 키에 대응하는 값(value)을 저장할 수도 있다.

사전은 초기화할 때 {}를 사용한다. 초기 값은 '키:값' 의 형태로 준다.



Posted by scii
: