도찐개찐
[python] 자료형(data type) 본문
파이썬 자료형
- Boolean
- Numbers
- String
- Bytes
- Lists
- Tuples
- Sets
- Dictionaries
파이썬 자료형의 특징
파이썬은 우리가 흔히 경험하였던 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를 삭제할 수 있습니다.
출처: https://artist-developer.tistory.com/22 [개발자 김모씨의 성장 일기:티스토리]
'PYTHON' 카테고리의 다른 글
[python] 형변환(casting) (0) | 2022.07.12 |
---|---|
[python] 연산자(operator) (0) | 2022.07.11 |
[python] 사칙 연산자 (0) | 2022.07.11 |
[python] 삼항 연산자(Ternary operator) (0) | 2022.07.11 |
[python] print 함수의 이해 (0) | 2022.07.11 |