[Python] 파이썬 자료형 총정리

파이썬 자료형 총정리


자료형이란?

3 은 int(정수)
3.3은 float(실수)
위처럼 데이터를 구분 할 수 있도록 타입을 나눈 것이 자료형이다.
변수를 선언하면 타입의 따라 자료형이 구분된다.


변수란?

변수는 변하는 수를 말한다.
예를 들어 변수 num 이 있다고 치자.
num 에 5를 넣으면 num = 5 라고 표현한다.
현재 num에는 5가 들어가 있다.
이 상태에서 5를 더 더하면 num = num + 5 라고 표현된다.
이제는 num 에는 10이 들어가게 된다.
이처럼 값이 계속 변하는 수를 변수라고 하며
변수의 반댓말은 변하지 않는 수 상수라고 한다.


정적 타입 언어 vs 동적 타입 언어

변수를 선언 할 때 자료형을 적어야 하면 정적 타입 언어, 자료형을 적지 않아도 되면 동적 타입 언어다. 그 중 파이썬은 동적 타입 언어다.

예를 들어보자.

- 정적 타입 언어
C언어나 C++ 에서는 변수를 선언 할 때 아래처럼 자료형을 같이 적어 줘야한다.
int a = 5;
float b = 4.5;

- 동적 타입 언어
하지만 파이썬에서는 자료형을 적지 않아도 된다(심지어 세미클론도 안 붙여도 됨.)
a = 5
b = 4.5

장점 : 자료형을 안적는 만큼 시간 단축.
단점 : 실행 도중 예상치 못한 Type Error가 발생 할 수 있음.


파이썬 자료형 종류



파이썬의 자료형은 위에 그림처럼 여러 개가 있다.
일단 저런게 있구나 하며 한번 훑어보면 된다.
아래에서 순서대로 설명한다.


1. 숫자형

숫자형에는 정수, 실수, 복소수 3개가 대표적이며 그 외 8진수, 16진수 등이 있다.
가장 기초이자 수학, 과학 분야에 사용 되므로 아무래도 가장 많이 사용되는 자료형이다.

1. 정수형(Integer)
단어 그대로 정수를 말한다.
양의 정수, 음의 정수, 0 까지 모두 가능하다.
a = 100
a = 0
a = - 130


2. 실수형(Floating point)
소수점이 있는 숫자를 말한다. 
마찬 가지로 양, 음 다 된다.
a = 3.14
a = -3.14


3. 복소수(Complex)
실수와 허수 요소를 가진 숫자를 말한다.
a = 3 + 4j


4. 8진수(Octal)
8진수를 표현하려면 123 라는 8진수 앞에 숫자 0 + 소문자 o 나 숫자 0 + 대문자O를 붙이면 된다.
아래는 8진수 132를 10진수로 출력한 결과다.
a = 0o132
print(a)
결과 : 90



5. 16진수(Hexadecimal)
16진수를 표현하려면 1f라는 16진수 앞에 0x(숫자 0 + 소문자 x)를 붙이면 된다.
아래는 16진수 1f를 10진수로 출력한 결과다.

8진수 -> 2진수 변환
2진수 -> 10진수 변환
16진수 -> 10진수 변환
각 진수들을 변환하는 과정을 알아 두는 것이 좋다.
a = 0x1f
print(a)
결과 : 31


2. 딕셔너리(Dictionary)

Key 와 Value를 한쌍으로 가지는 자료형을 딕셔너리라고 한다.
예를 들어 Key = Baseball, Value = 야구 일때
Baseball 이라는 Key로 야구라는 Value의 값을 얻을 수가 있다.
즉 수많은 데이터가 있을 때 순차적으로 검색하는 것이 아닌 Baseball 이라는 단어만 검색한다.



1. 딕셔너리의 기본 모습
딕셔너리 = {Key1:Value1, Key2:Value2}



2. 딕셔너리 만들고 Key 값 출력하기.
코딩을 해보자.
name, age, height 라는 key의 해당되는 Value는 Nick, 10, 130 이다.
딕셔너리를 만들고 출력 해보면 다음과 같은 결과가 나온다.
dictionary = {'name':'Nick', 'age':10, "height":130}

print(dictionary['name'])
print(dictionary['age'])
print(dictionary['height'])
결과 : 
Nick
10
130



3. 딕셔너리 출력해 보기
딕셔너리를 출력 하면 각 Value와 Key 값이 확인 가능하다.
dictionary = {'name':'Nick', 'age':10, "height":130}

print(dictionary)
결과 : {'name': 'Nick', 'age': 10, 'height': 130}



4. Key를 정수값으로 출력하기.
키 값을 정수로도 할 수 있다. 작은 따음표 없이 Key 값에 넣을 수 있다.
dictionary = {1:'Nick'}

print(dictionary[1])
결과 : Nick



5. Value를 리스트로 출력하기
리스트도 Value에 넣을 수 있다.
dictionary = {'num':[1,2,3,4]}

print(dictionary['num'])
결과 : [1, 2, 3, 4]



6. 딕셔너리 요소 추가하기
dir = {1:1}
dir[3] = 2

print(dir)
결과 : {1: 1, 3: 2}



7. 딕셔너리 요소 삭제하기
dir = {1:1, 2:2}
del dir[1] #Key 1인 요소 삭제

print(dir)
dictionary = {'name':'Nick', 'age':10, "height":130}

print(dictionary['name'])
print(dictionary['age'])
print(dictionary['height'])

결과 : {2: 2}



8. 딕셔너리 사용 시 주의점1
Key 값이 같으면 맨 뒤에 Key 빼고는 다 무시된다.
dir = {1:1, 1:2, 1:3} # 1:3 만 나옴

print(dir)
결과 : {1: 3}



9. 딕셔너리 사용 시 주의점2
Value는 가능하지만 Key 에는 리스트 사용이 불가능하다. 
실행하면 오류가 발생한다.
dir = {[1,2,3]:1}

print(dir)
결과 : Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 1, in <module>
    dir = {[1,2,3]:1}
TypeError: unhashable type: 'list'


3. 불린(Boolean)

불(bool) 자료형은 두 가지 값 밖에 나타낼 수 없다.
참이면 True, 거짓이면 False로 나타낸다.


1. 불 자료형
예제를 보다시피 불 자료형은 참과 거짓 판단 유무로 사용된다.
a = True
b = False

print(a)
print(b)
결과 : 
True
False


2. 조건문으로 참, 거짓 판단하
변수 a 와 b 에는 조건문에 대한 참, 거짓이 들어간다.
2가 1보다 크기 때문에 a는 Ture,
1이 2보다 크지 않기 때문에 b에는 False 출력된다.
a = 2 > 1
b = 1 > 2

print(a)
print(b)
결과 : 
True
False



4. 집합(Set)

집합 자료형은 집합을 쉽게 처리하기 위해 만든 자료형이다.
집합 자료형은 Set키워드를 사용해서 만든다. 


1. 집합 자료형 사용 방법
s1 은 리스트를 사용하여 집합을 만들었다.
s2는 문자열을 입력해서 집합을 만들었다.
s1 = set([1,2,3])
s2 = set('abc')

print(s1)
print(s2)
결과 : 
{1, 2, 3}
{'a', 'c', 'b'}



2. 집합 자료형의 특징
집합 자료형의 특징은 크게 2개가 있다.
- 순서가 없다.
- 중복 값을 허용하지 않는다.
s1 은 순서가 없어 결과 값이 뒤죽박죽으로 나온다.
s2 는 순서가 없어 결과 값이 뒤죽박죽이며 중복된 p가 제거 된다.
s1 = set([3,1,4,6])
s2 = set("apple")

print(s1)
print(s2)
결과 :
{1, 3, 4, 6}
{'p', 'e', 'a', 'l'}



3. 인덱싱에 접근하기
집합 자료형의 순서가 없다는 것은 인덱싱 접근을 할 수 없다는 거다.
첫번째 원소에 접근 하려고 하면 아래와 같이 에러가 발생한다.
s1 = set([3,1,4,6])

print(s1[0])
결과 : Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 1, in <module>
    dir = {[1,2,3]:1}
TypeError: unhashable type: 'list'

그러면 인덱싱 접근이 아예 불가능 할까?
그렇지 않다 순서가 있어 인덱싱 접근이 가능한 리스트, 튜플을 이용하면 된다.

- 집합 자료형을 리스트로 변환해서 인덱싱에 접근하기
s1 = set([1,2,3,4])
list1 = list(s1)

print(list1[0])
결과 : 1

- 집합 자료형을 튜플로 변환해서 인덱싱에 접근하기
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 - s2)
print(s2 - s1)
결과 : 1



4. 교집합 구하기
 s1, s2 두 개의 집합 중 같은 값을 구하는 교집합이다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 - s2)
print(s2 - s1)
결과 : {1, 2}



5. 합집합 구하기
모든 값을 구하는 합집합이다. 이때 중복된 1,2 는 한개씩만 출력된다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 - s2)
print(s2 - s1)
결과 : {1, 2, 3, 4, 5, 6}



6. 차집합 구하기
s1은 s2와 중복되지 않는 1, 2가 나온다.
s2도 s1과 중복되지 않는 5, 6이 나온다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 - s2)
print(s2 - s1)
결과 : 
{3, 4} // s1
{5, 6} // s2


5. 문자열(String)

a 와 같은 하나의 문자열로 이루어진 것을 문자열이라고 한다.
예를 들어 a 라는 문자, b 라는 문자, c 라는 문자가 합쳐지면 abc라는 문자열이 나온다.

"1234"
"apple"
위와 같이 문자열은 " "(큰 따옴표) 사이에 있다.
1234가 숫자라도 " " 사이에 있으면 문자열이다.

여담이지만 파이썬 문자열 공부하면서 C++에 없는 편리한 기능들이 있어 놀랐다.
파이썬이 다른 언어보다 쉽다는 이유를 알것같다.



1. 문자열 만들기
문자열은 작은 따옴표, 큰 따옴표 두 개다 가능하다.
print('작은 따옴표 : i am happy')
print("큰 따옴표 : i am happy")
결과 : 
작은 따옴표 : i am happy
큰 따옴표 : i am happy



2. 변수에 문자열 넣기
문자열은 작은 따옴표, 큰 따옴표 두 개다 가능하다.
a = '작은 따옴표 : i am happy'
b = "큰 따옴표 : i am happy"

print(a)
print(b)
결과 : 
작은 따옴표 : i am happy
큰 따옴표 : i am happy



3. 큰 따옴표, 작은 따옴표 포함시키
큰 따옴표, 작은 따옴표를 포함 시키는 방법은 아래와 같다.
a = '"저는 배고파요" 라고 말했습니다.'
b = "'저는 배고파요' 라고 말했습니다."
c = "\"저는 배고파요\" 라고 말했습니다."
d = "\'저는 배고파요\' 라고 말했습니다."

print(a)
print(b)
print(c)
print(d)
결과 : 
"저는 배고파요" 라고 말했습니다.
'저는 배고파요' 라고 말했습니다.
"저는 배고파요" 라고 말했습니다.
'저는 배고파요' 라고 말했습니다.



4. 문자열 줄 바꾸기(엔터)
문자열 줄 바꾸기 방법은 3개가 있다.
- \n
- ''' 내용 '''
- """ 내용 """
a = "동해물과 백두산이 \n마르고 닳도록"
b = '''하느님이 보우하사
우리나라 만세'''
c = """무궁화 삼천리
화려강산"""

print(a)
print(b)
print(c)
결과 : 
동해물과 백두산이 
마르고 닳도록
하느님이 보우하사
우리나라 만세
무궁화 삼천리
화려강산



5. 문자열 더하기
두 개 이상의 문자열을 합칠 수 있다.
a = "My name"
b = "is Nick"

print(a + b)

결과 : My nameis Nick



6. 문자열 곱하기
진짜 놀랐다. 문자열을 곱할 수가 있다.
My name 을 10번 곱하는 예제다.
a = "My name "

print(a * 10)
결과 :My name My name My name My name My name My name My name My name My name My name 



7. 문자열 인덱싱
문자열 인덱싱은 abcd 문자가 있을 때 인덱스를 정하는 거다. 즉 첫번째 인덱스를 호출하면 a, 두번째 인덱스를 호출하면 b가 나온다.
아래 예제를 보면 첫 번째 인덱스인 M을 출력했다.
주의 점은 대부분의 프로그래밍 언어는 0이 시작이다. 즉 0번째를 호출 한 것은 문자열의 첫 번째를 가져온다.
a = "My name"

print(a[0])
결과 : M


이번에는 a[2] 즉 세 번째 문자를 가져온다. 그런데 아무것도 보이지 않는다.
이유는 My 와 name 사이에는 공백이 있다. 즉 공백도 엄연히 하나의 문자로 처리 되므로 공백이 출력된거다.
a = "My name"

print(a[2])
결과 : 


-1 음수를 출력하면 맨 뒤에 숫자인 e가 출력 된다. -2 를 넣으면 m이 출력.
a = "My name"

print(a[-1])
결과 : e



8. 문자 슬라이싱
파이썬에서 또 엄청 편리한 기능을 제공한다.
문자 슬라이싱은 예를 들어 0번째에서 4번째 인덱스의 문자를 뽑아 낼 수 있다.
0 ~ 4번째 인덱스가 출력 된다.
a = "My name"

print(a[0:4])
결과 : My n


6. 리스트(List)

num = [1,2,3,4,5] 이렇게 숫자의 집합을 리스트라고 한다.

리스트는 여러 모양이 있다.
num = []
num = [1, 2, 3, 4]
num = ['a', 'b', 'c']
num = [1, 2, 'a', 'c']
num = [1, [2, 'a']]


1. 리스트 값 확인하기
리스트 값을 확인 가능 하다.
num = [1,2,3,4]

print(num)
결과 : [1, 2, 3, 4]



2. 리스트 요소 값 출력하기
첫 번째와 두 번째 인덱스를 출력하는 예제
num[-1]처럼 리스트 요소 값에 마이너스가 들어가면 마지막부터 출력 된다.
num = [1,2,3,4]

print("1번째 = ", num[0])
print("2번째 = ", num[1])
print("4번째 = ", num[-1])
결과 : 
1번째 =  1
2번째 =  2
4번째 =  4


3. 리스트 요소 값 더하기
첫 번째 1과 두 번째 2를 더해 3이 나온다.
num = [1,2,3,4]

print("sum : ", num[0] + num [1])
결과 : sum :  3



4. 리스트안에 리스트 값 출력하기
리스트 값 요소와 똑같이 출력하면 된다.
num = [1,2,[3,4,5,6]]

print("3번째 = ", num[2])
결과 : 3번째 =  [3, 4, 5, 6]



5. 리스트안에 리스트의 요소값 출력하기
리스트[3,4,5,6] 에서 4만 출력하는 예제다.
[1,2,[3,4,5,6]] 라는 리스트의 3번째 인 [3,4,5,6]리스트의 2번째를 출력하는 거다.
따라서 num[2][1]이 된다.
num = [1,2,[3,4,5,6]]

print(num[2][1])
결과 : 4



6. 리스트 슬라이싱 하기
특정 요소만 잘라서 가져오는 방법이 슬라이싱이다.
여기서 주의 할 점은 0:3은 0에서 3번째 전까지 즉 2번째 까지만 가져온다는 뜻이다.
따라서 0, 1, 2 번째 인덱스인 1,2,3이 출력 된다.
num = [1,2,3,4,5,6]

print(num[0:3])
결과 : [1, 2, 3]



7. 2개 이상의 리스트 더하기
예제 처럼 여러개의 리스트를 더할 수 있다.
num1 = [1,2,3]
num2 = [4,5,6]
num3 = [7,8,9]

print(num1 + num2 + num3)
[1, 2, 3, 4, 5, 6, 7, 8, 9]



8. 리스트  반복하기(곱하기)
리스트를 곱해서 여러 번 반복이 가능하다.
num1 = [1,2,3]

print(num1 * 5)
결과 : [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]




7. 튜플(Tuple)

튜플과 리스트와 유사하지만 다른 점이 있다.
1. 리스트는 [ ]로 요소를 감싸지만 튜플은 ( )로 감싼다.
2. 리스트는 값 생성, 수정, 삭제가 가능하지만 튜플은 불가능하다.
3. 리스트는 하나의 요소만 가질 때 ,(콤마를 찍지 않아도 되지만 튜플은 t = (1, ) 처럼 하나의 요소만을 가질 때는 반드시 ,(콤마)를 붙여줘야 한다.
4. 리스트는 [] 괄호가 필수지만 튜플은 t = 1,2,3,4 처럼 괄호를 생략해도 된다.

튜플에는 여러 모양이 있다.
t = ()
t = (1, 2, 3, 4)
t = (1,)
t = 1, 2, 3, 4
t = ('a', 'b', (1, 'd'))


1. 튜플 만들기
기본적인 튜플 요소 값 만들기다.
t = (1,2,3,4)

print(t)
결과 : (1, 2, 3, 4)


2. 튜플 요소값 삭제가 불가능하다.
del 함수로 요소를 지우려고 하면 오류가 발생한다.
리스트는 요소 값 삭제가 가능하지만 튜플은 불가능하다.
t = (1,2,3,4)
del t[0]

print(t)
결과 : 
Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 2, in <module>
    t[0] = 5
TypeError: 'tuple' object does not support item assignment


3. 튜플은 요소 값 변경이 불가능하다.
요소 값을 변경하려고 하면 에러가 발생한다.
리스트는 요소 값 변경이 가능하지만 튜플은 불가능하다.
t = (1,2,3,4)
t[0] = 5

print(t)
결과 :
Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 2, in <module>
    t[0] = 5
TypeError: 'tuple' object does not support item assignment


4. 튜플 인덱싱하기
리스트와 같이 튜플도 인덱싱이 가능하다.
2 번째 요소인 2가 출력된다.
t = (1,2,3,4)

print(t[1])
결과 : 2


5. 슬라이싱 하기
특정 요소만 잘라서 가져오는 방법이 슬라이싱이다.
t = (1,2,3,4)

print("첫번째 부터 끝까지 = ", t[0:])
print("두번째 부터 4번째 까지 = ", t[1:4])
결과 : 
첫번째 부터 끝까지  =  (1, 2, 3, 4)
두번째 부터 4번째 까지 =  (2, 3, 4)


6. 튜플 더하기
두 개 이상의 튜플을 더할 수 있다.
t1 = (1,2,3,4)
t2 = (5,6,7,8)

print(t1 + t2)
결과 : (1, 2, 3, 4, 5, 6, 7, 8)


7. 튜플 곱하기
튜플을 여러 번 반복 할 수 있다.
t = (1,2,3,4)

print(t * 3)
결과 : (1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)



마치며

프로그래밍 문법을 처음 공부하는 사람은 이해가 되지 않아 어려울 수 있다. 
그래서 포기하는 사람이 생긴다.
하지만 포기하고 싶을 때 구구단을 외우던 어린 시절을 생각 해보자.
그때 당시 세상에서 가장 어렵다 느꼈던 것이 구구단이다. 
그런데 어떻게 다 외웠는가? 그냥 하루에 수십, 수 백번씩 반복해서 외웠을 거다.
어느 기점부터 전부 외우게 되고 8 X 3만 던져도  정답이 바로 나오는게 한국인이다.
코딩도 마찬가지다 처음 하면 어렵고 이해 가지 않는 것이 정상이다. 
하지만 포기 하지 않고 달려 나간다면 언젠가는 익숙해 질 것이며 이해가 쏙쏙 될 거다.
미래에 당신이 개발자가 되어 문법 공부하던 시절을 떠올린다면 과거의 자신이 귀여울 것이다. 문법은 가장 기초이자, 개발자에겐 구구단 같은 거니까.


댓글

이 블로그의 인기 게시물

[Python] 파이썬 if문 사용법과 예제

[네트워크] 오류 제어 방식 이란?(FEC, BEC, ARQ)

[Virtual Box] 가상머신 에러 E_FAIL (0x80004005), (VERR_SUPLIB_PATH_NOT_CLEAN) 해결 방법