파이썬 내장 자료형


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


리스트

 마지막 요소부터 접근 가능

튜플 

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

사전 

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

 

- 리스트(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
----------------------------------------------------------------------------------------

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



수치형 자료형


 프로그래밍 공부를 해보신 분들은 수치형 자료형이 뭔지 알고 계실겁니다. 수치형 자료형은 쉽게 말해 수치를 표현 하는 자료형이라고 말할 수 있습니다. 파이썬에서는 정수형, 실수형, 롱형, 복소수형이 있습니다.


 자료형 공부에 앞서, 저처럼 이클립스에서 실습을 할 때 한글 주석을 넣으면 오류가 발생합니다. 아래와 코드를 넣어주면 한글로 주석을 달아도 오류가 발생하지 않습니다.

# -*- coding: utf-8 -*-


- 정수형


 정수형은 쉽게 말해 소수 영역이 없는 수로 타입은 int를 사용합니다. 사용은 아래와 같습니다. 8진수와 16진수에는 정수앞에 각각 0과 0x를 붙여줍니다.

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

# -*- coding: utf-8 -*- #한글 주석을 사용하기 위해 사용

a=11   # 10진수

b=011  # 8진수

c=0x11 # 16진수

print a

print b

print c

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

(출력 결과)

11

9

17

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


 정수형(int)의 최대 크기는 sys모듈의 maxint를 확인하면 알 수 있습니다.

----------------------------------------------------------------------------------------
import sys
print sys.maxint
----------------------------------------------------------------------------------------
(출력 결과)
2147483647
----------------------------------------------------------------------------------------

- 실수형


 실수형은 소수영역이 있는 수로, float타입을 가집니다. 사용은 아래와 같습니다. e3은 10의 3승 e5는 10의 5승을 뜻합니다.

----------------------------------------------------------------------------------------
a=1.2
b=1.3e3
c=-0.5e5
print a; print b; print c
----------------------------------------------------------------------------------------
(출력 결과)
1.2
1300.0 # 1.3*10^3승인 1300.0 이 출력됩니다.
-50000.0
----------------------------------------------------------------------------------------
 위의 결과 처럼 바껴서 출력되는 이유는 print함수의 str(repr) 내장 함수 때문이라고 합니다.


- 롱형

 

 롱형 상수는 큰 자리수의 수를 표현할때 사용합니다. 숫자의 끝에 L문자를 붙여서 사용하는데, 정수형의 최대크기(maxint)를 넘어가면 명시적으로 롱형으로 변환됩니다. 하지만, 굳이 큰 수가 아닌 작은 수여도 L을 붙인다면 타입이 롱형이 됩니다.
----------------------------------------------------------------------------------------
h=12345678901234565L
h2=12345678901234565 # 명시적으로 롱형으로 변환
print h; print h2
print type(h); print type(h2)
----------------------------------------------------------------------------------------
(출력 결과)
# 같은 값인 롱형으로 출력되며, 타입도 롱형으로 동일합니다.
12345678901234565
12345678901234565
<type 'long'>
<type 'long'>
----------------------------------------------------------------------------------------

- 복소수형


 복소수형은 실수부와 허수부의 합으로 구성된 수를 뜻합니다. 자세하게 복소수의 수학적인 내용이 궁금하신 분들은 아래 링크를 참고하시길 바랍니다.
http://terms.naver.com/entry.nhn?docId=1103039&cid=40942&categoryId=32206
 허수에는 j를 붙여 연산하며, 각각 실수부와 허수부끼리 연산합니다.
----------------------------------------------------------------------------------------
a=10+20j
b=30+50j
print a+b
----------------------------------------------------------------------------------------
(출력 결과)
(40+70j)
----------------------------------------------------------------------------------------
 참고로, 복소수형 관련 내장함수로 complex()라는 함수가 있는데, 인자로 값을 넣어주면 아래와 같은 복소수 형태로 반환해줍니다.
complex(1.1,5) -> (1.1+5j)

- math 모듈


 수학적인 값들을 저장하고 있는 모듈입니다. math모듈을 임포트 하면, pi를 비롯해 e, sin, sqrt(제곱근을 구하는 함수)등을 사용 할 수 있습니다.
----------------------------------------------------------------------------------------
import math
print math.pi
print math.e
print math.sin(5)
print math.sqrt(4)
----------------------------------------------------------------------------------------
(출력 결과)
3.14159265359
2.71828182846
-0.958924274663
2.0
----------------------------------------------------------------------------------------

문자열 자료형


 파이썬에서 문자열 자료형은 단일 따옴표(')와 이중 따옴표(") 모두 문자열을 사용할 수 있습니다.
----------------------------------------------------------------------------------------
a='park hye ung'
b="Park Hye Ung"
----------------------------------------------------------------------------------------
(출력 결과)
park hye ung
Park Hye Ung
----------------------------------------------------------------------------------------

 문자열의 자료형은 다른 언어에서 처럼 변경이 되지 않습니다.  문자열의 주요 기능으로 인덱싱 슬라이싱이 있습니다.
 

- 인덱싱(Indexing)


 C언어에서의 배열처럼 파이썬에서도 문자열을 할당하면 다음과 같이 인덱스가 0번부터 시작합니다. 이때 인덱스 -1번은 맨뒤의 문자를 의미합니다. 인덱싱은 이러한 인덱스의 번호를 이용하는 방법입니다.
----------------------------------------------------------------------------------------
a="Hello!!"
print a[0]; print a[-1]
----------------------------------------------------------------------------------------
(출력 결과)
H # 맨 앞 문자 출력
! # 맨 뒤 문자 출력
----------------------------------------------------------------------------------------

- 슬라이싱(Slicing)

 
 슬라이싱은 인덱싱을 이용해서 부분적으로 인덱스를 출력할 수 있는 방법입니다. 형식은 start(inlcluded) : stop(excluded) : step 의 형태입니다. included와 excluded를 써논 이유는 range함수처럼 시작하는 인덱스는 포함하고, 끝나는 인덱스는 포함하지 않기 때문입니다.
----------------------------------------------------------------------------------------
a="Hello!!"
print a[1:3] # 1번인덱스부터 3-1번인덱스까지 출력
print a[4:]  # 4번 인덱스부터 출력
print a[:5]  # 5-1번 인덱스까지 출력
print a[::-1] # -1번(맨뒤)인덱스부터 출력 -> 거꾸로 출력
----------------------------------------------------------------------------------------
(출력 결과)
el
o!!
Hello
!!olleH
----------------------------------------------------------------------------------------

- 문자열의 연산

 
 문자열의 연산은 +와 *가 있습니다. +는 두 문자열을 연결해주고 *는 해당 문자열을 반복해 줍니다. 아래와 같이 사용할 수 있습니다.
----------------------------------------------------------------------------------------
a="Hello!"
b=" "
c="world~"
print a+b+c  # a,b,c 문자열을 모두 합쳐서 출력
print a*3      # a를 3번 반복해서 출력
----------------------------------------------------------------------------------------
(출력 결과)
Hello! world~
Hello!Hello!Hello!
----------------------------------------------------------------------------------------

 문자열의 길이는 len내장 함수를 통해 알 수 있습니다. 공백까지 문자열의 길이에 포함됩니다. 사용 형태는 다음과 같습니다. 
----------------------------------------------------------------------------------------
s="Hel lo!"
print len(s)
----------------------------------------------------------------------------------------
(출력 결과)
7
----------------------------------------------------------------------------------------

 마지막으로, 문자열내 포함관계 여부를 알 수 있는 키워드가 있습니다. in과 not in 인데, 참 거짓에 따라 True/False를 반환합니다. in은 포함할 경우, not in은 포함하지 않을 경우 True를 반환합니다.
----------------------------------------------------------------------------------------
s='park Hye Ung'
print 'park' in s
print 'park' not in s
print 'hello' not in s
----------------------------------------------------------------------------------------
(출력 결과)
True
False
True
----------------------------------------------------------------------------------------

* 출처 : 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍
          두산 백과 - 복소수




+ Recent posts