1 왜 형변환을 알아야 할까?
→ 문자열과 숫자를 잘못 섞으면 오류가 발생함
→ 조건문은 내부적으로 bool 판단이 자동으로 수행됨
→ 입력값(input)은 무조건 문자열(str)이므로, 숫자로 변환해야 계산이 가능함
→ 여러 값(리스트/튜플/세트/딕셔너리)을 다루러면 컬렉션 간 변환 규칙이 필수
2 타입 확인 기본기 - type(), isinstance()
1) type()
→ 정확히 '지금 이 값이 어떤 타입인지' 확인함
1-1 코드
print(type(10)) # <class 'int'>
print(type("hello")) # <class 'str'>
2) isinstance()
→ 상속 관계까지 고려해 타입을 판정함
→ 가장 정확하고 실전적임
→ 타입 비교는 무조건 isinstance() 사용을 습관화
1-2 코드
print(isinstance(True, int)) # True (bool은 int의 자식 클래스)
3 묵시적 형변환 (자동 형변환)
→ 파이썬은 연산 과정에서 더 넓은 표현 범위의 타입으로 자동 승격함
→ bool에서 int, int에서 float, float에서 complex로 자동으로 변환함
2-1 코드
print(3 + 2.5) # 5.5 (int -> float으로 자동 승격)
print(2 + 3j) # (2+3j) (int -> complex 승격)
print(True + 3) # 4 (True -> 1)
→ 숫자와 문자열 간, 서로 다른 컬렉션, 복잡한 구조물에선 자동으로 변환되지 않음
4 문자열 <-> 숫자 변환 핵심 규칙
→ 문자열에서 숫자로 변환하려면 문자열이 숫자 형태 그대로여야 함
3-1-1 코드
print(int('10')) # 정수 문자열만
print(float('3.14')) # 실수 문자열
→ 숫자에서 문자열로 변환은 항상 가능함
3-1-2 코드
print(str(20))
print(f'나이: {20}') # 가장 추천하는 방식 (f-string)
5 숫자인지 확인하는 가장 안전한 방법
4-1-1 코드 : 정수 문자열 확인
print('123'.isdigit()) # True
4-1-2 코드 : 소수 여부 확인(try-except 활용)
def is_number(s):
try:
float(s)
return True
except:
return False
print(is_number('3.14')) # True
4-1-3 코드 : 실재 변환 패턴 (가장 실전적)
value = input('숫자 입력: ')
try:
num = float(value)
print('변환 성공:', num)
except ValueError:
print('유효한 숫자가 아닙니다.')
6 bool() 규칙 - Truthy / False
→ 파이썬은 조건문에서 값의 '존재 여부'로 참/거짓을 판단함
→ 0, 0.0, '', [], (), {}, set(), None은 False로 평가되는 값들
→ '0', ' ', [0]을 포함한 False로 평가되는 값들을 제외한 나머지 값들 전부는 True로 평가됨
7 컬렉션(리스트/튜플/세트/딕셔너리) 변환 핵심 정리
1) 리스트 <-> 튜플
5-1 코드
print(tuple([1,2,3]))
print(list((1,2,3)))
2) 리스트/튜플 <-> 세트
→ 리스트/튜플을 세트로 변환하면서 중복이 제거되지만, 순서가 유지되지 않으므로 다르게 나올 수 있음
5-2-1 코드
print(set([1,2,2,3])) # {1,2,3}
→ 다시 리스트/튜플로 만들면 순서가 달라질 수 있으므로, 정렬해서 변환하고 싶다면 5-2-2 코드 형식으로 사용
5-2-2 코드
print(sorted(set([1,2,2,3]))) # [1,2,3]
3) 문자열 <-> 컬렉션
5-3-1 코드 : 문자열 -> 컬렉션
print(list('abc')) # ['a','b','c']
print(tuple('abc')) # ('a','b','c')
print(set('hello')) # {'h','e','l','o'}
5-3-2 코드 : 컬렉션 -> 문자열
print(''.join(['a','b','c'])) # 'abc'
print('-'.join(('a','b','c'))) # 'a-b-c'
4) 딕셔너리 변환 핵심
→ dict() 변환 시 키만 변환함
[(key,value), (key,value)]
8 안전한 변환 패턴 - 예외 처리 + 타입 점검
1) try-except 기본 구조
6-1 코드
value = 10
try:
num = int(value)
print(value)
except ValueError:
print('정수로 변환할 수 없습니다.')
2) 단계적 변환 (정수 -> 실수 -> 실패)
6-2 코드
value = 3.14
try:
print('정수:', int(value))
except ValueError:
try:
print('실수:', float(value))
except ValueError:
print('숫자가 아닙니다.')
3) 변환 전 조건부 검사
6-3 코드
value = ' 3 '
v = value.strip()
if v.isdigit():
v = int(v)
print(v)
else:
print('정수가 아닙니다.')
4) 반복 가능한 타입인지 확인 후 변환
6-4 코드
value = (1, 2, 3)
if isinstance(value, (str, list, tuple, set)):
print(list(value))
9 자주 하는 실수 & 주의사항 (필수만 추림)
→ 문자열과 숫자를 결합하려면 str()을 사용하거나, f-string 형식을 추천함
→ 숫자가 아닌 문자열을 숫자로 변환하면 ValueError가 발생하므로, 변환 전 숫자 형태인지 반드시 검사하기
→ int()는 반올림이 아니라 '버림'임
→ 정수는 반복이 불가능해 list()를 사용하면 TypeError가 발생함
→ dict()로 변환하려면 항상 (키, 값) 형태만 변환하기
→ input()으로 받은 값은 항상 문자열임
→ set으로 변환 시 순서 보존이 안 됨
→ list()는 얕은 복사이므로, deepcopy가 필요함
Python 형변환과 타입 확인에 대해 더 상세한 설명을 원하는 분들은 아래 사이트에 접속하기
Python 형변환과 타입 확인뿐만 아니라 다른 프로그래밍 언어에 대해 알고 싶은 분들은 아래 사이트에 접속하여 원하는 링크에 접속하기
'파이썬 > 변수와 데이터 타입' 카테고리의 다른 글
| 파이썬 None 완벽 정리 - None vs 빈 값 차이, is 비교, 함수 반환까지 한 번에 끝내기 (0) | 2025.12.04 |
|---|---|
| 파이썬 Boolean, 조건문 완전 정리 - True/False, 비교/논리 연산, in, None, 단축 평가까지 한 번에 이해하기 (0) | 2025.11.30 |
| 파이썬 문자열 완전정복 : split, join, replace, 정규표현식, 한글 깨짐, 디버깅까지 이것만 보면 끝! (0) | 2025.11.27 |
| 처음 배우는 파이썬 데이터 타입 완전 정복 - 7종 기본 타입부터 가변 vs 불변, 형 변환, 비교/연산 주의사항까지 (0) | 2025.11.04 |
| 파이썬 변수 완전정복 : 선언부터 재할당, 삭제, 실수까지 초보 100% 이해 (0) | 2025.10.29 |