사용자가 의도하지 않고, 파이썬 내부적으로 자료형을 변환하는 경우
# 1. bool type
print(True + 3) # 4
# 2. Numeric type (int, float)
print(3 + 5.0) # 8.0
사용자가 특정 함수를 활용하여 의도적으로 자료형을 변환하는 경우
int
- str, float ⇒ int
- 단, 형식에 맞는 문자열만 정수로 변환 가능
# 문자열은 암시적 타입 변환이 되지 않음
print('3'+ 4) # TypeError : can only concatenate str (not "int") to str
# 명시적 타입 변환이 필요
print(int('3') + 4) # 7
# 정수 형식이 아닌 경우 타입 변환할 수 없음
print(int('3.5') + 4) # ValueError : invalid literal for int() with base 10:
float
- str(참고), int ⇒ float
- 단, 형식에 맞는 문자열만 float로 변환 가능
print('3.5'+3.5) # TypeError : can only concatenate str (not "float") to str
# 정수 형식인 경우에도 float로 타입 변환
print(float('3')) # 3.0
# float 형식이 아닌 경우 타입 변환할 수 없음
print(float('3/4') + 5.3) # ValueError : could not convert string to float:
str
- int, float, list, tuple, dict ⇒ str
print(str(1)) # '1'
print(str(1.0)) # '1.0'
print(str([1, 2, 3])) # '[1, 2, 3]'
print(str({1, 2, 3})) # '{1, 2, 3}'
파이썬에서 컨테이너는 서로 변환 가능
# 리스트 형변환
l = [1, 2, 3, 4]
print(str(l)) # '[1, 2, 3, 4]'
print(tuple(l)) # (1, 2, 3, 4)
print(set(l)) # {1, 2, 3, 4}
#range(l) # 불가
#dict(l) # 불가
# 튜플 형변환
t = (1, 2, 3, 4)
print(str(t)) # '(1, 2, 3, 4)'
print(list(t)) # [1, 2, 3, 4]
print(set(t)) # {1, 2, 3, 4}
#range(t) # 불가
#dict(t) # 불가
# range 형변환
r = range(1, 5)
print(str(r)) # 'range(1, 5)'
print(list(r)) # [1, 2, 3, 4]
print(set(r)) # {1, 2, 3, 4}
print(tuple(r)) # (1,2,3,4)
#dict(r) # 불가
# set 형변환
s = {1, 2, 3, 4}
print(str(s)) # '{1, 2, 3, 4}'
print(list(s)) # [1, 2, 3, 4]
print(tuple(s)) # {1, 2, 3, 4}
#range(s) # 불가
#dict(s) # 불가
# dict 형변환
d = {'name': 'ssafy', 'year': 2020}
print(str(d)) # "{'name': 'ssafy', 'year': 2020}"
print(list(d)) # ['name', 'year'] => key값만 저장됨
print(tuple(d)) # ('name', 'year') => key값만 저장됨
print(set(d)) # {'name', 'year'} => key값만 저장됨
# range(d) 불가