파이썬 내장 자료형


 파이썬에는 세 가지 내장 자료형이 있습니다. 앞에서 공부할 때 몇번 쓰였던 리스트와 튜플, 사전이 있습니다. 세 자료형 모두 집합적인 자료형이라는 공통점이 있습니다. 아래 표는 각 자료형의 특징입니다.


리스트

 마지막 요소부터 접근 가능

튜플 

 읽기만 가능하며, 속도가 빠름 

사전 

 용어 사전과 유사한 방식으로 구성 

 

- 리스트(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 # a50을 가리키고

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]


print a is b
print a2 is b2
print c is d
----------------------------------------------------------------------------------------
(실행 결과)
a is b :  True
a2 is b2 :  True
c is d :  False

----------------------------------------------------------------------------------------

 타입이 동일한지 확인할 때 처럼, 두 객체의 값이 같은 지 확인할 때에도 '=='연산자를 사용합니다. 

----------------------------------------------------------------------------------------

c=[1,2,3,4]

d=[1,2,3,4]


print "c==d : ",c==d # 식별자는 다르지만, 값이 같으므로 True가 반환됨

----------------------------------------------------------------------------------------

c==d :  True
----------------------------------------------------------------------------------------

* 출처 : 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍



+ Recent posts