파이썬 내장 자료형
파이썬에는 세 가지 내장 자료형이 있습니다. 앞에서 공부할 때 몇번 쓰였던 리스트와 튜플, 사전이 있습니다. 세 자료형 모두 집합적인 자료형이라는 공통점이 있습니다. 아래 표는 각 자료형의 특징입니다.
리스트 | 마지막 요소부터 접근 가능 |
튜플 | 읽기만 가능하며, 속도가 빠름 |
사전 | 용어 사전과 유사한 방식으로 구성 |
- 리스트(List)
리스트는 임의의 객체를 순차적으로 저장하는 집합적 자료형 입니다. 순차적인 자료형이기 때문에 인덱스가 존재합니다. 문자열과 같이 인덱싱, 슬라이싱, 문자열 연산(+,*)이 가능합니다. 아래와 같은 형태로 사용합니다.
----------------------------------------------------------------------------------------
L=[1,2,3]
print "len(L) :", len(L)
print "L[1] :", L[1] # 인덱싱
print "L[-1] :", L[-1] # 인덱싱
print "L[1:3] : ", L[1:3] # 슬라이싱
print "L+L :", L+L # 문자열 + 연산
print "L*3 :", L*3 # 문자열 * 연산
print "type(L) :", type(L) # 문자열의 타입
----------------------------------------------------------------------------------------
(실행 결과)
L[1] : 2
L[-1] : 3
L[1:3] : [2, 3]
L+L : [1, 2, 3, 1, 2, 3]
L*3 : [1, 2, 3, 1, 2, 3, 1, 2, 3]
type(L) : <type 'list'>
----------------------------------------------------------------------------------------
리스트는 문자열과 다르게 리스트는 인덱스의 값을 변경 할 수 있습니다.
----------------------------------------------------------------------------------------
L=[1,2,3]
print "before L :",L
L[2]=7
print "after L :",L
----------------------------------------------------------------------------------------
(실행 결과)
before L : [1, 2, 3]
after L : [1, 2, 7]
----------------------------------------------------------------------------------------
앞에서 range()함수 살짝 공부했었는데, range()함수를 이용해서도 리스트를 만들 수 있습니다.
----------------------------------------------------------------------------------------
L2=range(10) # 리스트 L2 생성
print "L2 : ",L2
print "L2[::2] :",L2[::2]
print "L2[::-1] :",L2[::-1]
print "8 in L2 :",8 in L2
----------------------------------------------------------------------------------------
(실행 결과)
L2 : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # range(10)에 의해 1부터 9까지 리스트 생성
L2[::2] : [0, 2, 4, 6, 8] # step 2때문에 0,2,4,6,8 만 출력
L2[::-1] : [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # step -1때문에 거꾸로 출력
8 in L2 : True # 멤버쉽 테스트
----------------------------------------------------------------------------------------
- 튜플(Tuple)
튜플은 리스트와 유사하지만 튜플 내의 값을 변경할 수 없는 자료형입니다. 리스트는 대괄호 '[]'를 사용하는 반면에 튜플은 소괄호 '()'를 사용합니다. 튜플또한 각 값의 인덱스가 부여되며, 대부분의 문자열 연산이 가능하지만, 값은 변경 할 수 없습니다. 아래와 같은 형태로 사용합니다.
----------------------------------------------------------------------------------------
t=(1,2,3,4)
print "len(t) :", len(t)
print "t[1] :", t[1]
print "t[-1] :", t[-1]
print "t[1:3] :", t[1:3]
print "t+t :", t+t
print "t*3 :", t*3
print "5 in t :",5 in t
print "type(t) :", type(t)
----------------------------------------------------------------------------------------
(실행 결과)
t[-1] : 4
t[1:3] : (2, 3)
t+t : (1, 2, 3, 4, 1, 2, 3, 4)
t*3 : (1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
5 in t : False
type(t) : <type 'tuple'>
----------------------------------------------------------------------------------------
- 사전(Dictionary)
정수형 인덱스가 아닌 키 값을 저장하는 자료형 입니다. 키 값 : 매핑형태로 저장되며, 중괄호 '{}'를 사용합니다. 리스트, 튜플과는 다르게 임의의 순서로 저장됩니다. 실제로는 해시값 순으로 정렬 된다고 합니다. 다음과 같은 형태로 사용합니다.
----------------------------------------------------------------------------------------
P={'apple':'red','banana':'yellow','grape':'purple'} # 사전 P 선언 및 키와 값 할당
print "P['apple'] :",P['apple'] # 사전의 apple 키의 해당하는 값 출력
print 'before P : ',P
P['orange']='orange' # orange라는 키와 값 삽입
print 'after P : ',P
P['grape']='delicious' # 키가 grape인 값 변경
print "P :",P
print "'apple' in P :",'apple' in P # 멤버쉽 테스트
print '*'*30 # 줄을 구분하기 위해 * 문자 출력
print "P.key() :",P.keys() # 사전의 키만 추출해서 리스트로 반환
print "P.values() :",P.values() # 사전의 값만 추출해서 리스트로 반환
print "P.items() :",P.items() # 키와 값을 튜플로 추출
----------------------------------------------------------------------------------------
(실행 결과)
P['apple'] : red
before P : {'grape': 'purple', 'apple': 'red', 'banana': 'yellow'}
after P : {'orange': 'orange', 'grape': 'purple', 'apple': 'red', 'banana': 'yellow'}
P : {'orange': 'orange', 'grape': 'delicious', 'apple': 'red', 'banana': 'yellow'}
'apple' in P : True
******************************
P.key() : ['orange', 'grape', 'apple', 'banana']
P.values() : ['orange', 'delicious', 'red', 'yellow']
P.items() : [('orange', 'orange'), ('grape', 'delicious'), ('apple', 'red'), ('banana', 'yellow')]
----------------------------------------------------------------------------------------
items()함수는 튜플로 추출 하지만, 반환형태는 리스트입니다.
- 내장 자료형의 특성
내장 자료형의 특성을 표로 정리해 봤습니다. 시퀀스는 인덱스가 존재한다는 뜻이고, 리터럴은 정수나 숫자, 표기법 등이 하나씩 저장된다는 뜻이며, 컨테이너는 집합체 형태라는 뜻입니다.
추가적으로 타입이 동일한 지 알아볼 때는 '=='를 사용합니다. 그리고, 아무것도 아닌, 아무것도 없는 타입을 None객체라고 합니다.
----------------------------------------------------------------------------------------
a=[1,2,3]
b=(4,5,6)
print type(a)==type(b)
None c
print type(c)
----------------------------------------------------------------------------------------
(실행 결과)
False
<type 'NoneType'>
----------------------------------------------------------------------------------------
- 객체 신원 식별
객체를 식별하기 위한 고유의 식별자가 있습니다. 이러한 식별자를 알아보는 함수가 id()함수입니다. 수치형 자료는 이미존재하는 1을 가리키는 레퍼런스를 할당하기 때문에 식별자가 동일하며, 리스트 같은 형태의 자료형은 값이 동일해도 식별자가 다릅니다.
----------------------------------------------------------------------------------------
a=50 # a가 50을 가리키고
b=a # b또한 a를 가리켜 50을 가리키기 때문에 식별자가 동일
print id(a); print id(b)
a2=3 # 수치형 자료는 동일한 식별자를 가짐
b2=3
print id(a2); print id(b2)
print '*'*50
c=[1,2,3,4]
d=[1,2,3,4]
print "id(c) :",id(c) # 리스트 값은 동일하지만, 식별자는 다름
print "id(d) :",id(d)
----------------------------------------------------------------------------------------
(실행 결과)
id(a) : 30704440
id(b) : 30704440
id(a2) : 30703576
id(b2) : 30703576
**************************************************
id(c) : 39759304
id(d) : 39759240
두 객체가 동일한지 테스트 할 때에는 is 키워드를 사용합니다. 다음과 같은 형태로 사용합니다.
a=50
b=a
a2=3
b2=3
c=[1,2,3,4]
d=[1,2,3,4]
----------------------------------------------------------------------------------------
타입이 동일한지 확인할 때 처럼, 두 객체의 값이 같은 지 확인할 때에도 '=='연산자를 사용합니다.
----------------------------------------------------------------------------------------
c=[1,2,3,4]
d=[1,2,3,4]
print "c==d : ",c==d # 식별자는 다르지만, 값이 같으므로 True가 반환됨
----------------------------------------------------------------------------------------
* 출처 : 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍
'언어 > Python' 카테고리의 다른 글
[파이썬] 제어문과 함수 (0) | 2017.01.25 |
---|---|
[파이썬] 각종 연산자 (0) | 2017.01.21 |
[파이썬] 수치형 자료형과 문자열 자료형 (0) | 2017.01.16 |
[파이썬] 기본문형과 콘솔 입·출력 (0) | 2017.01.14 |
[파이썬] 개발환경 구축(설치) (0) | 2016.12.12 |