loading
본문 바로가기
Language/Python

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

by 개발자 김모씨 2020. 9. 19.
반응형

<파이썬 자료형 총정리>

 

안녕하세요.
파이썬 자료형에 관한 포스팅으로 돌아온,
개발자 김모씨입니다.

파이썬 기본부터 ML 분야로의 응용까지 포스팅을 해보겠다고 질렀긴 했는데
이걸 뭐 어디서부터 시작해야 하나...
고민을 많이 했습니다.

생각해보니
파이썬에 대한 글을 찾아보시는 분들 중 대부분은,
<이미 다른 언어(C++, JAVA 등)에 어느 정도 능숙한 개발자> 이거나
<프로그래밍 경험이 없지만, ML이나 데이터 분석 쪽에 흥미를 가진 비개발자>
둘 중 하나이실 거라고 생각이 드네요.
다시 말해, 파이썬의 기본 문법이 중요한 것이 아니라
'파이썬이 어떻게 쓰이는지', '어떤 분야에 어떻게 응용되는지'가 더 궁금하실 것 같았습니다.

그래서 내린 결론으로, 파이썬 기본 문법은 최대한 짧게,
핵심만 짚고 빠르게 넘어가려 합니다!
그리고 ML이나 데이터 쪽 라이브러리를 활용한 응용으로 넘어가는 거죠.

오늘은 그 첫번째로,
파이썬의 자료형에 대한 총괄적 설명입니다!

 

파이썬 자료형의 특징

 

파이썬은 우리가 흔히 경험하였던 C/C++이나 JAVA와 다른 특징을 가집니다.
바로 변수를 선언할 때, 자료형을 명시적으로 선언하지 않는다라는 특징인데요.
(변수란, 자료형의 값을 저장하는 공간)

이런 특징을 가진 프로그래밍 언어를
'동적 타입 언어'라고 합니다.

정적타입 언어와 동적타입 언어의 차이인데요.

먼저 대표적인 정적타입 언어인 C++의 변수 선언부를 보시면,

//C++

int num1 = 3;
float num2 = 4.6f;
double num3 = 3.23d;

char ch = 's';
string str = "abc";

//컴파일 시 자료형 결정

이런 식으로, 반드시 앞에 자료형을 명시해야 합니다.
이를 통해, 컴파일 시에 잘못된 자료형으로의 대입이나 연산 등의 오류를 미리 체크하는 거죠.

그에 반해 동적타입 언어인 우리의 Python 에서는,

#Python

num1 = 12
num2 = 1.2

str = "Hello world!" 

#자료형을 작성하지 않는다.

이런 식으로, 자료형을 명시적으로 선언하지 않습니다.
자료형 없이 변수에 값을 대입하면, 알아서 자료형이 지정되죠.
이처럼 동적타입 언어에서는 컴파일 시가 아닌, 런타임(실행 시간) 시에 변수의 형이 결정됩니다.

동적타입 언어는 실행시켜 보기 전에는 자료형에서 비롯되는 오류를 검출하기 어렵다는 단점이 있지만,
코드 구현시 자료형을 일일이 지정할 필요가 없어서
유연하고 매우 빠르게 코딩이 가능하다 라는 장점이 있죠.

그럼, 파이썬의 자료형에는 어떤 것들이 있는지 살펴볼까요?

파이썬의 자료형은 크게 수치 자료형, 불 자료형, 군집 자료형 으로 구분할 수 있습니다.

- 수치 자료형 : int, float, complex
- 불 자료형 : bool
- 군집 자료형 : str, list, tuple, set, dictionary

 

수치 자료형

수치 자료형은 우리가 흔히 봐왔던 다른 언어의 자료형과 비슷합니다.
수치값을 저장하기 위한 자료형이죠.

#python

i = 1000       # int
f = 999.123    # float
c = 21 + 3j    # complex

print(type(i))
print(type(f))
print(type(c))

 

result :

<class 'int'>
<class 'float'>
<class 'complex'>

type()은 변수의 자료형을 반환하는 함수입니다.

결과를 보시면,
int는 1, 100, 1000 등의 정수형,
float는 999.123, 3.14, 314e-2 등 지수형,
complex는 21 + 3j 등과 같은 복소수(실수부, 허수부) - (고등학교 때 배우셨죠....?)
를 위한 자료형인 것을 알 수 있죠.

 

불 자료형

불 자료형은 무척 간단합니다.
boolean 값을 저장하기 위한 자료형이죠.

#python

isAlpha = True
inBeta = False

print(type(isAlpha))
print(isAlpha)

 

result:

<class 'bool'>
True

이처럼, 불 자료형은 True/False 값을 저장하기 위한 자료형인 것을 알 수 있죠.

 

군집 자료형 - str

str은 문자열을 위한 자료형입니다.
순서가 있고(인덱스 기반 접근), 중복이 가능하며, 수정이 불가능(Immutable)한 특성을 가집니다.

#Python

s1 = "Hello, Python1" //str 변수
s2 = 'Hello, ' + 'Python2'

print(type(s1))
print(len(s1)) # s1의 길이 출력
print(s1[2])   # s1의 2번째 인덱스 값 출력
print(s1[2:5]) # s1의 2 이상 5 미만 인덱스 값 출력

s2[2] = a    # 에러 발생!, 값 수정 불가

 

result:

<class 'str'>
14  # s1의 길이
l   # s1의 2 index 값
llo

str 자료형은 " "(큰따옴표 쌍) 또는 ' '(작은따옴표 쌍)으로 감싸서 초기화 합니다.
len() 함수를 써서 문자열의 길이를 알 수 있습니다.

순서가 있다는 말은, '문자열의 인덱스를 기반으로 값을 읽을 수 있다'라는 의미입니다.
프로그래밍 언어에서 인덱스는 0부터 0, 1, 2, ... 방식으로 시작합니다.
그래서 print(len(s1))의 결과는 'l'이 되죠.

print(s1(2:5)) 에서 [2:5]는 파이썬의 슬라이스입니다.
'앞 숫자 이상 ~ 뒷 숫자 미만' 까지를 의미하죠.
그래서 해당 코드의 출력문은 "llo" 가 됩니다.

str 자료형은 수정이 불가능하다는 특징을 가집니다.
특정 인덱스의 값만을 수정할 수 없습니다.
그래서 코드에서 "s2[2] = a" 처럼 2 index만 수정하려고 하는 경우, 에러가 발생하죠.
이런 상황에서는, 새로운 str 자료형 변수를 만들어야 합니다.

또한 2번째 라인의 선언부처럼, str 자료형은 +, x 연산으로 변수를 생성할 수 있습니다.

 

군집 자료형 - list

list는 여러 값을 넣기 위한 자료형입니다.
순서가 있고(인덱스 기반 접근), 중복이 가능하며, 수정이 가능한 특성을 가집니다.

#Python

L = [10, 20, 30, 40, 50]  # list 자료형 변수 선언

print(type(L))

L.append(25)  # 25 추가
print(L)

L.remove(10)  # 10 제거
print(L)

L.sort() # 정렬
print(L)

print(L[2])  # index 2 값 출력
print(L[2:4]) # index 2 이상 4 미만 출력

L = L + [60, 70]
print(L)

L = L * 2
print(L)

 

result:

<class 'list'>
[10, 20, 30, 40, 50, 25]  # append(25)
[20, 30, 40, 50, 25]  # remove(10)
[20, 25, 30, 40, 50]  # sort()
30  # L[2]
[30, 40] # L[2, 4]
[20, 25, 30, 40, 50, 60, 70] # L = L + [60, 70]
[20, 25, 30, 40, 50, 60, 70, 20, 25, 30, 40, 50, 60, 70] # L = L * 2

list 자료형은 [ ] (대괄호 쌍)으로 감싸서 초기화 합니다.

str 자료형과 마찬가지로,
순서가 있기 때문에 인덱스와 슬라이스로 값을 읽는 것이 가능합니다.

또한 수정이 가능하기 때문에,
삽입(append), 삭제(remove), 정렬(sort)가 가능하죠.

또한 마지막 코드처럼 +, x 연산 또한 가능합니다.

 

군집 자료형 - tuple

tuple 자료형은 변경 불가능한 list 자료형으로 생각하시면 쉽습니다.
순서가 있고(인덱스 기반 접근),  중복이 가능하며, 수정이 불가능(Immutable)한 특성을 가집니다.

#Python

t = (10, 20, 30, 50, 40, 10, 10)

print(t.count(10))  # 값 10의 갯수
print(t.index(20))  # 값 20의 index

 

result :

3
1

tuple 자료형은 ( ) (소괄호 쌍)으로 감싸서 초기화합니다.

순서가 있기 때문에, 인덱스와 슬라이스로 값을 읽는 것이 가능합니다.

수정이 불가능하기 때문에, append , remove, sort 등의 함수를 사용할 수 없습니다.

tuple 자료형은 속도가 빠르다는 장점 때문에, 파이썬 native 함수 내부에서 많이 사용되고 있습니다.

 

군집 자료형 - set

set 자료형은 수학의 집합과 비슷한 개념입니다.
순서가 없고, 중복이 불가능하며, 수정이 가능한 특성을 가집니다.

#Python

s = {10, 20, 30, 40, 50}
print(type(s))

s.add(60)
print(s)

s.remove(10)
print(s)

print(20 in s)

 

result :

<class 'set'>
{10, 20, 30, 40, 50, 60}
{20, 30, 40, 50, 60}
True

set 자료형은 { } (중괄호 쌍)으로 감싸서 초기화 합니다.

순서가 없기 때문에, 인덱스나 슬라이스로 값을 읽는 것이 불가능합니다.
대신, in, not int을 사용하여 set 안에 값이 있는지를 조회할 수 있죠.

수정이 가능하기 때문에, add, remove 등의 함수를 사용할 수 있습니다.

 

군집 자료형 - dictionary

dictionary 자료형은 처음 보시는 분들이 많을 텐데요.
사전이라고 생각하시면 됩니다.
C/C++이나 JAVA를 써보신 분들은, map이나 hash와 많이 비슷합니다.
순서가 없고, 중복이 불가능하며, 수정이 가능한 특성을 가집니다.

 

#Python

d = {1:10, 2:20, 3:30, 4:40, 5:50}
print(type(d))

d[6] = 60   # key = 6, value = 60인 값 append
print(d)

print(d[1])

del d[2]
print(d)

for k, val in d.items() :
    print("key : ", k, " Value : ", val)  #for문 반복으로도 출력 가능

 

result :

<class 'dict'>
{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60}  # append 6:60
10  #print(d[1])
{1: 10, 3: 30, 4: 40, 5: 50, 6: 60}  # del d[2]

Key : 1 Value : 10
Key : 3 Value : 30
Key : 4 Value : 40
Key : 5 Value : 50
Key : 6 Value : 60

dictionary 자료형은 { } (중괄호 쌍)과 key : value 형태의 값들로 초기화 합니다.

dictionary 자료형은 key의 중복이 불가능합니다.
이미 key 1이 dictionary 내에 있으면, key가 1인 값을 추가로 넣을 수 없죠.
하지만, 값의 중복은 가능합니다.
key가 1인 value와 key가 10인 value 모두 10이 될 수 있죠.

헷갈리실 만한게,
순서가 없는 dictionary에서 [ ] 대괄호 안에 들어가는 값은,
index가 아닌 key 입니다.
예를 들어 'print(d[1])' 이라는 코드에서
d[1]은 index 1을 의미하는 것이 아니라, key 1을 의미하는 것이죠.

마찬가지로 del 함수를 사용하여 특정 key의 key : value를 삭제할 수 있습니다.

 

 

이상으로, 파이썬 자료형 총정리였습니다.

군집 자료형의 활용은 끝이 없을 정도로 다양한데,
오늘은 정의와 기본적인 사용방법에 한정해서만 알아보았습니다.

프로그래밍 언어를 공부할 때,
"그 언어의 자료형을 알고 이해할 수 있다면, 이미 그 언어의 절반을 터득한 것이나 다름없다"
라는 말이 있죠.

이 글을 읽고 이해하신 여러분은
이미 파이썬의 절반을 터득한 것입니다!!!! (아니, 벌써?! 축하드려요!!!!!)

 

다음 포스팅은 자료형을 사용해, 좀 더 깊이 들어가보도록 하겠습니당

추천과 구독하기는 개발자 김모씨에게 큰 힘이 됩니당

감사합니당당당

반응형

댓글