Data Types#
Python은 동적 타입 언어로, 변수를 선언할 때 명시적으로 타입을 지정할 필요가 없다.
하지만 각 데이터 타입을 이해하는 것은 효율적인 코딩과 디버깅에 필수적이다.
숫자형 (Numeric)#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 정수형 (Integer): 양의 정수, 음의 정수, 0을 포함하는 숫자형
age = 25
population = 1000000000000 # Python3는 정수 크기 제한이 없습니다
print(type(age)) # <class 'int'>
print(type(population)) # <class 'int'>
# 부동소수점 (Float): 소수점을 포함하는 숫자형
height = 175.5
pi = 3.14159
print(type(height)) # <class 'float'>
print(type(pi)) # <class 'float'>
# 복소수 (Complex): 실수부와 허수부로 구성된 숫자형
complex_number = 3 + 4j
print(complex_number.real) # 실수부: 3.0
print(complex_number.imag) # 허수부: 4.0
print(type(complex_number)) # <class 'complex'>
|
문자열 (str)#
문자들의 집합으로, 작은따옴표(’’)나 큰따옴표("")로 감싸서 표현한다.
1
2
3
| g = 'Hello, Python!'
h = "안녕하세요"
print(type(g)) # <class 'str'>
|
문자열은 순서가 있는 시퀀스 자료형으로, 인덱싱과 슬라이싱이 가능하다.
1
2
| print(g[0]) # 'H'
print(g[7:13]) # 'Python'
|
불리언 (bool)#
참(True
) 또는 거짓(False
)을 나타내는 자료형
1
2
3
4
5
6
7
| # 불리언 (Boolean)
i = True
j = False
print(type(i)) # <class 'bool'>
# 비교 연산 결과
is_adult = age >= 18 # True 또는 False 반환
|
시퀀스 타입#
리스트 (list)#
여러 값을 순서대로 저장하는 자료형으로, 대괄호([]
)로 표현하며, 값의 변경이 가능하다.
1
2
3
4
| k = [1, 2, 3, 'a', 'b', 'c']
print(type(k)) # <class 'list'>
k[0] = 100 # 값 변경
print(k) # [100, 2, 3, 'a', 'b', 'c']
|
튜플 (tuple)#
리스트와 유사하지만, 한 번 생성하면 값을 변경할 수 없는 불변(immutable) 자료형. 소괄호(()
)로 표현한다.
1
2
3
| l = (1, 2, 3, 'a', 'b', 'c')
print(type(l)) # <class 'tuple'>
# l[0] = 100 # 오류 발생: 튜플은 값을 변경할 수 없음
|
범위 (range)#
연속된 정수를 생성하는 자료형으로, 주로 반복문에서 사용
1
2
| m = range(5) # 0부터 4까지의 정수 생성
print(list(m)) # [0, 1, 2, 3, 4]
|
매핑 타입#
딕셔너리 (dict)#
키(key)와 값(value)의 쌍으로 이루어진 자료형으로, 중괄호({}
)로 표현.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| p = {'name': 'Alice', 'age': 25}
print(type(p)) # <class 'dict'>
print(p['name']) # 'Alice'
# 딕셔너리 (Dictionary)
user = {
"name": "김철수",
"age": 30,
"city": "서울"
}
# 중첩 딕셔너리
student = {
"info": {
"name": "박영희",
"grade": 3
},
"scores": {
"math": 90,
"english": 85
}
}
|
집합 타입#
기능 | set | frozenset |
---|
값 변경 가능 여부 | ✅ 가능 (add , remove 가능) | ❌ 불가능 (불변) |
집합 연산 (` | , &, -, ^`) | ✅ 가능 |
딕셔너리 키로 사용 | ❌ 불가능 | ✅ 가능 |
리스트 요소로 사용 | ❌ 불가능 | ✅ 가능 |
집합 (set)#
중복되지 않는 요소들의 모임으로, 순서가 없으며 중괄호({}
)로 표현한다.
1
2
3
| n = {1, 2, 3, 3, 4, 4, 5}
print(type(n)) # <class 'set'>
print(n) # {1, 2, 3, 4, 5}
|
집합형은 합집합, 교집합, 차집합 등의 집합 연산에 사용된다.
1
2
3
| o = {3, 4, 5, 6, 7}
print(n.union(o)) # 합집합: {1, 2, 3, 4, 5, 6, 7}
print(n.intersection(o)) # 교집합: {3, 4, 5}
|
프로즌셋 (frozenset)#
frozenset
은 불변(immutable) 집합으로, set
과 거의 동일한 기능을 제공하지만, 한 번 생성된 후에는 수정할 수 없다.
즉, 요소를 추가(add
)하거나 제거(remove
)할 수 없지만, set
과 동일한 **집합 연산(합집합, 교집합, 차집합 등)**을 수행할 수 있다.
1
2
3
4
5
6
7
8
| # 일반적인 set
normal_set = {1, 2, 3}
# 불변 set (frozenset)
frozen = frozenset([3, 4, 5])
print(type(frozen)) # <class 'frozenset'>
print(frozen) # frozenset({3, 4, 5})
|
frozenset
은 불변 자료형이므로, 딕셔너리의 키로 사용할 수 있다.
(일반 set
은 변경 가능성이 있어서 키로 사용할 수 없음.)
1
2
3
4
5
| fs_key = frozenset([1, 2, 3])
# 딕셔너리의 키로 사용 가능
dictionary = {fs_key: "값"}
print(dictionary) # {frozenset({1, 2, 3}): '값'}
|
frozenset
은 다음과 같은 집합 연산을 수행할 수 있다:
합집합 (|
또는 .union()
)
1
2
3
4
5
| fs1 = frozenset([1, 2, 3])
fs2 = frozenset([3, 4, 5])
print(fs1 | fs2) # frozenset({1, 2, 3, 4, 5})
print(fs1.union(fs2)) # frozenset({1, 2, 3, 4, 5})
|
교집합 (&
또는 .intersection()
)
1
2
| print(fs1 & fs2) # frozenset({3})
print(fs1.intersection(fs2)) # frozenset({3})
|
차집합 (-
또는 .difference()
)
1
2
| print(fs1 - fs2) # frozenset({1, 2})
print(fs1.difference(fs2)) # frozenset({1, 2})
|
대칭 차집합 (^
또는 .symmetric_difference()
)
1
2
| print(fs1 ^ fs2) # frozenset({1, 2, 4, 5})
print(fs1.symmetric_difference(fs2)) # frozenset({1, 2, 4, 5})
|
바이너리 타입#
모두 1바이트(8비트) 단위의 값을 연속적으로 저장하는 시퀀스 자료형이지만, 변경 가능성에 따라 차이가 있다.
활용 예시:
바이트 (bytes)#
바이트어레이 (bytearray)#
None 타입#
NoneType#
값이 없음을 나타내는 특별한 자료형으로, None
으로 표현
1
2
| q = None
print(type(q)) # <class 'NoneType'>
|
데이터 타입 확인#
파이썬에서 데이터 타입을 확인하는 방법은 크게 세 가지가 있다.
type() 함수 사용
type()
함수는 객체의 데이터 타입을 반환한다.
1
2
3
4
5
6
7
8
| a = 1
print(type(a)) # <class 'int'>
b = 1.5
print(type(b)) # <class 'float'>
c = "Hello"
print(type(c)) # <class 'str'>
|
class 속성 사용
모든 파이썬 객체는 __class__
속성을 가지고 있어, 이를 통해 데이터 타입을 확인할 수 있다.
1
2
3
| print(a.__class__) # <class 'int'>
print(b.__class__) # <class 'float'>
print(c.__class__) # <class 'str'>
|
isinstance() 함수 사용
isinstance()
함수는 객체가 특정 타입인지 확인할 때 사용한다.
1
2
3
| print(isinstance(a, int)) # True
print(isinstance(b, float)) # True
print(isinstance(c, str)) # True
|
참고 및 출처#
Type Casting 파이썬에서는 다양한 내장 함수를 사용하여 데이터 타입을 변환할 수 있다.
데이터 타입을 변환할 때에는
문자열을 숫자로 변환할 때는 해당 문자열이 유효한 숫자 형식이어야 한다. 실수를 정수로 변환할 때는 소수점 이하가 버려진다. 복잡한 데이터 구조(리스트, 딕셔너리 등)를 변환할 때는 주의가 필요하다.
등을 주의해야 한다. 정수로 변환 (int())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 정수형 변환 float_num = 3.14 int_num = int(float_num) # 3 (소수점 이하 버림) # 실수형 변환 a = float("10.5") # 문자열을 실수로 integer = 5 # 정수를 실수로 float_num = float(integer) # 5.0 b = float(10) # 문자열을 숫자로 변환 str_num = "123" number = int(str_num) # 123 float_num = float("3.14") # 3.14 # 진수 변환 binary_str = "1010" decimal = int(binary_str, 2) # 10 (2진수를 10진수로) hex_str = "1A" decimal = int(hex_str, 16) # 26 (16진수를 10진수로) 문자열로 변환 (str())
...