KR_DataType - somaz94/python-study GitHub Wiki

Python 데이터 νƒ€μž…(DataType) κ°œλ… 정리


1️⃣ κΈ°λ³Έ 데이터 νƒ€μž…

파이썬의 κΈ°λ³Έ 데이터 νƒ€μž…λ“€μ„ μ‚΄νŽ΄λ³΄κ² λ‹€.

# μˆ«μžν˜•(Numeric)
x = 10                # μ •μˆ˜(int)
pi = 3.14             # μ‹€μˆ˜(float)
z = 3 + 4j            # λ³΅μ†Œμˆ˜(complex)

# λ¬Έμžμ—΄(String)
name = "Python"       # ν°λ”°μ˜΄ν‘œ
desc = 'Language'     # μž‘μ€λ”°μ˜΄ν‘œ
text = """μ—¬λŸ¬ μ€„μ˜   # μ—¬λŸ¬ 쀄 λ¬Έμžμ—΄
λ¬Έμžμ—΄μ„ μž‘μ„±ν•  수
μžˆμŠ΅λ‹ˆλ‹€."""

# λΆˆλ¦¬μ–Έ(Boolean)
is_valid = True
is_active = False

# None νƒ€μž…
empty_value = None    # 값이 μ—†μŒμ„ ν‘œν˜„

βœ… νŠΉμ§•:

  • μˆ«μžν˜•: μ •μˆ˜, μ‹€μˆ˜, λ³΅μ†Œμˆ˜ 지원
  • λ¬Έμžμ—΄: μž‘μ€λ”°μ˜΄ν‘œ, ν°λ”°μ˜΄ν‘œ, μ‚Όμ€‘λ”°μ˜΄ν‘œ μ‚¬μš© κ°€λŠ₯
  • λΆˆλ¦¬μ–Έ: True, False κ°’λ§Œ 가짐
  • None: 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄λŠ” 특수 νƒ€μž…


2️⃣ μ»¬λ ‰μ…˜ 데이터 νƒ€μž…

# 리슀트(List) - μˆœμ„œκ°€ 있고, λ³€κ²½ κ°€λŠ₯ν•œ μ»¬λ ‰μ…˜
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14]

# νŠœν”Œ(Tuple) - μˆœμ„œκ°€ 있고, λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ»¬λ ‰μ…˜
coordinates = (10, 20)
person = ("John", 25, "New York")
single_item = (42,)  # 단일 μ•„μ΄ν…œ νŠœν”Œμ€ 콀마 ν•„μš”

# λ”•μ…”λ„ˆλ¦¬(Dictionary) - ν‚€-κ°’ 쌍의 μ»¬λ ‰μ…˜
user = {"name": "John", "age": 30, "city": "New York"}
scores = {1: "Gold", 2: "Silver", 3: "Bronze"}

# μ§‘ν•©(Set) - 쀑볡이 μ—†λŠ” μ»¬λ ‰μ…˜
unique_numbers = {1, 2, 3, 4, 5}
unique_chars = set("hello")  # {'h', 'e', 'l', 'o'}

# λΆˆλ³€ μ§‘ν•©(Frozenset) - λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ§‘ν•©
immutable_set = frozenset([1, 2, 3, 4, 5])

βœ… μ»¬λ ‰μ…˜ νŠΉμ§•:

  • 리슀트: λ‹€μ–‘ν•œ νƒ€μž… μ €μž₯ κ°€λŠ₯, 인덱싱과 μŠ¬λΌμ΄μ‹± 지원, 가변적
  • νŠœν”Œ: λ¦¬μŠ€νŠΈμ™€ μœ μ‚¬ν•˜μ§€λ§Œ 생성 ν›„ λ³€κ²½ λΆˆκ°€λŠ₯, λΆˆλ³€μ„± 보μž₯
  • λ”•μ…”λ„ˆλ¦¬: ν‚€-κ°’ 쌍으둜 데이터 μ €μž₯, ν‚€λ‘œ κ°’ μ ‘κ·Ό, ν•΄μ‹œ 기반 검색
  • μ§‘ν•©: 쀑볡 μš”μ†Œλ₯Ό μžλ™μœΌλ‘œ 제거, μˆ˜ν•™μ  μ§‘ν•© μ—°μ‚° 지원
  • λΆˆλ³€ μ§‘ν•©: μ§‘ν•©κ³Ό λ™μΌν•˜μ§€λ§Œ 생성 ν›„ λ³€κ²½ λΆˆκ°€λŠ₯


3️⃣ ν˜• λ³€ν™˜

# λ¬Έμžμ—΄ -> 숫자
num_str = "123"
num_int = int(num_str)    # 123
num_float = float("3.14") # 3.14

# 숫자 -> λ¬Έμžμ—΄
str_num = str(123)        # "123"

# λΆˆλ¦¬μ–Έ λ³€ν™˜
bool(1)      # True
bool("")     # False
bool([])     # False
bool(0)      # False

# μ»¬λ ‰μ…˜ κ°„ λ³€ν™˜
list((1, 2, 3))        # [1, 2, 3]
tuple([1, 2, 3])       # (1, 2, 3)
set([1, 2, 2, 3, 3])   # {1, 2, 3}
dict([("a", 1), ("b", 2)])  # {"a": 1, "b": 2}

βœ… λ³€ν™˜ κ·œμΉ™:

  • λ¬Έμžμ—΄μ€ μ μ ˆν•œ ν˜•μ‹μ΄μ–΄μ•Ό λ³€ν™˜ κ°€λŠ₯
  • μˆ«μžλŠ” λͺ¨λ“  νƒ€μž…μœΌλ‘œ λ³€ν™˜ κ°€λŠ₯
  • λΉ„μ–΄μžˆλŠ” κ°μ²΄λ‚˜ 0은 False둜 λ³€ν™˜
  • μ»¬λ ‰μ…˜ νƒ€μž… κ°„ λ³€ν™˜μ€ 일반적으둜 κ°€λŠ₯ν•˜λ‚˜ ν˜Έν™˜μ„± 주의 ν•„μš”


4️⃣ νƒ€μž… 확인

# type() ν•¨μˆ˜ μ‚¬μš©
type(123)     # <class 'int'>
type("text")  # <class 'str'>
type(3.14)    # <class 'float'>

# isinstance() ν•¨μˆ˜ μ‚¬μš©
x = 100
isinstance(x, int)    # True
isinstance(x, str)    # False

# 닀쀑 νƒ€μž… 확인
isinstance(x, (int, float))  # True (xκ°€ intλ‚˜ float 쀑 ν•˜λ‚˜μΈμ§€)

# 클래슀 계측 확인
issubclass(bool, int)  # True (bool은 int의 ν•˜μœ„ 클래슀)

βœ… 확인 방법:

  • type(): 객체의 μ •ν™•ν•œ νƒ€μž…μ„ λ°˜ν™˜
  • isinstance(): 객체가 νŠΉμ • νƒ€μž…(λ˜λŠ” νƒ€μž…λ“€)인지 확인
  • issubclass(): 클래슀 κ°„ 상속 관계 확인


5️⃣ 데이터 νƒ€μž… νŠΉμ§•

# λΆˆλ³€(immutable) νƒ€μž…
str_value = "hello"
num_value = 42
tuple_value = (1, 2, 3)
frozenset_value = frozenset([1, 2, 3])

# κ°€λ³€(mutable) νƒ€μž…
list_value = [1, 2, 3]
dict_value = {"key": "value"}
set_value = {1, 2, 3}

βœ… μ£Όμš” νŠΉμ§•:

  • 동적 타이핑 지원 (νƒ€μž… μžλ™ κ²°μ •)
  • λͺ¨λ“  것이 객체
  • λΆˆλ³€ νƒ€μž…: 숫자, λ¬Έμžμ—΄, νŠœν”Œ, frozenset
  • κ°€λ³€ νƒ€μž…: 리슀트, λ”•μ…”λ„ˆλ¦¬, μ…‹


6️⃣ λ°”μ΄νŠΈ(Bytes) 및 λ°”μ΄νŠΈ λ°°μ—΄(Byte Arrays)

# λ°”μ΄νŠΈ(λΆˆλ³€)
b = b'hello'  # λ°”μ΄νŠΈ λ¦¬ν„°λŸ΄
b2 = bytes([104, 101, 108, 108, 111])  # ASCII κ°’μœΌλ‘œ 생성
print(b)  # b'hello'

# λ°”μ΄νŠΈ λ°°μ—΄(κ°€λ³€)
ba = bytearray(b'hello')
ba[0] = 72  # 첫 λ°”μ΄νŠΈ λ³€κ²½ (ASCII 'H')
print(ba)  # bytearray(b'Hello')

# 인코딩/λ””μ½”λ”©
text = "μ•ˆλ…•ν•˜μ„Έμš”"
encoded = text.encode('utf-8')  # λ¬Έμžμ—΄ -> λ°”μ΄νŠΈ
decoded = encoded.decode('utf-8')  # λ°”μ΄νŠΈ -> λ¬Έμžμ—΄

βœ… λ°”μ΄νŠΈ νŠΉμ§•:

  • λ°”μ΄νŠΈ: 0-255 μ‚¬μ΄μ˜ μ •μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” λΆˆλ³€ μ‹œν€€μŠ€
  • λ°”μ΄νŠΈ λ°°μ—΄: λ°”μ΄νŠΈμ™€ μœ μ‚¬ν•˜μ§€λ§Œ 가변적
  • λ°”μ΄λ„ˆλ¦¬ 데이터 μ²˜λ¦¬λ‚˜ λ„€νŠΈμ›Œν¬ 톡신에 μ‚¬μš©
  • λ¬Έμžμ—΄κ³Ό λ³€ν™˜ μ‹œ 인코딩/λ””μ½”λ”© ν•„μš”


7️⃣ 특수 데이터 νƒ€μž…

# μ—΄κ±°ν˜•(Enum)
from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color.RED)  # Color.RED
print(Color.RED.name)  # 'RED'
print(Color.RED.value)  # 1

# λ„€μž„λ“œ νŠœν”Œ(NamedTuple)
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(11, 22)
print(p.x, p.y)  # 11 22
print(p[0], p[1])  # 11 22

# 데이터 클래슀(Python 3.7+)
from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    city: str = "Unknown"

person = Person("John", 30)
print(person)  # Person(name='John', age=30, city='Unknown')

βœ… 특수 νƒ€μž… νŠΉμ§•:

  • μ—΄κ±°ν˜•: μƒμˆ˜ 집합을 μ •μ˜ν•  λ•Œ 유용
  • λ„€μž„λ“œ νŠœν”Œ: ν•„λ“œλͺ…μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•œ νŠœν”Œ
  • 데이터 클래슀: 데이터 쀑심 클래슀 μ •μ˜λ₯Ό κ°„μ†Œν™”


8️⃣ νƒ€μž… 힌트(Type Hints)

# κΈ°λ³Έ νƒ€μž… 힌트 (Python 3.5+)
def greeting(name: str) -> str:
    return f"Hello, {name}"

# 볡합 νƒ€μž… 힌트
from typing import List, Dict, Tuple, Optional, Union, Any

# 리슀트 νƒ€μž…
def process_items(items: List[int]) -> List[str]:
    return [str(item) for item in items]

# λ”•μ…”λ„ˆλ¦¬ νƒ€μž…
def get_user_data(user_id: int) -> Dict[str, Any]:
    return {"name": "John", "age": 30}

# μ˜΅μ…”λ„ νƒ€μž…
def find_user(name: str) -> Optional[Dict[str, Any]]:
    if name == "John":
        return {"name": "John", "age": 30}
    return None

# μœ λ‹ˆμ˜¨ νƒ€μž…
def process_input(data: Union[str, int, float]) -> str:
    return str(data)

βœ… νƒ€μž… 힌트 νŠΉμ§•:

  • μ½”λ“œ 가독성 ν–₯상 및 λ¬Έμ„œν™” 효과
  • 정적 νƒ€μž… 검사 도ꡬ(mypy λ“±)와 ν•¨κ»˜ μ‚¬μš© κ°€λŠ₯
  • λŸ°νƒ€μž„μ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠμŒ(주석적 μ—­ν• )
  • λ³΅μž‘ν•œ νƒ€μž…λ„ ν‘œν˜„ κ°€λŠ₯


9️⃣ μ‚¬μš©μž μ •μ˜ νƒ€μž…

# 클래슀 μ •μ˜λ₯Ό ν†΅ν•œ μ‚¬μš©μž μ •μ˜ νƒ€μž…
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        return f"Hello, my name is {self.name}"

# μΈμŠ€ν„΄μŠ€ 생성
person = Person("John", 30)
print(type(person))  # <class '__main__.Person'>
print(person.greet())  # "Hello, my name is John"

# νƒ€μž… 체크
print(isinstance(person, Person))  # True

βœ… μ‚¬μš©μž μ •μ˜ νƒ€μž…:

  • 클래슀λ₯Ό 톡해 μƒˆλ‘œμš΄ νƒ€μž… μ •μ˜ κ°€λŠ₯
  • 데이터와 λ©”μ„œλ“œλ₯Ό μΊ‘μŠν™”
  • 상속을 ν†΅ν•œ νƒ€μž… 계측 ꡬ쑰 생성 κ°€λŠ₯
  • νƒ€μž… 체크 및 μΈμŠ€ν„΄μŠ€ 확인 κ°€λŠ₯


⚠️ **GitHub.com Fallback** ⚠️