[파이썬] 자료형 (Data Type) 처리

I. 자료형 결정

  • 파이썬에서 변수는 단순히 값을 관리하는 역할만 수행
  • 변수에 값을 할당(정의)할 때 실제 변수에 객체가 할당(binding) 되며, 이 때 자료형이 결정됨

가. 동적 자료형 (Dynamic Typing) 처리

  • 일반적으로 파이썬에서 자료형을 처리하는 방식
  • [예제] 변수 자료형 확인
var = [] # 변수에 빈 리스트 할당
result = type(var) # or var.__class__

print(result)

[결과]
<class 'list'>

나. 강한 자료형 (Strong Typing) 처리

  • 임의의 클래스를 사용하여 객체를 처리하는 방식
  • [예제] int 형 변수 정의
a = int('100')

print("a의 값 : ", a)
print("a의 클래스 : ", type(a))

[결과]
a의 값 :  100
a의 클래스 :  <class 'int'>

 

II. 객체 변경 (Mutation)

  • 파이썬에서는 객체 변경(원소 추가/변경 등)이 되는 것이 있고 안되는 것이 있으므로 객체 변경 가능 여부가 중요함

가. 변경 불가 자료형

  • 문자열 클래스로 만들어진 객체는 내부 원소 변경 불가
  • [예제] 문자열 클래스 원소 변경 오류
a = "문자열"
a[0] = "가"

[결과]
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    a[0] = "가"
TypeError: 'str' object does not support item assignment
  • [예제] 문자열 변경 방법 (replace)
a = "문자열"
b = a.replace("문", "가")

print("a 변수값 : ", a)
print("b 변수값 : ", b)

[변수]
a 변수값 :  문자열
b 변수값 :  가자열

나. 변경 가능 자료형

  • list 클래스 등은 내부 원소 변경 가능
  • [예제] list 클래스 원소 변경
a = [1, 2, 3]
a[0] = 10 # 0번째 원소 변경

print(a)

a.__setitem__(1,999) # 스페셜 메소드 사용하여 원소 변경

print(a)

[결과]
[10, 2, 3]
[10, 999, 3]

 

III. 형 변환 (Type Casting)

  • 파이썬에서 형 변환은 새로운 클래스 객체를 생성하는 것임
  • [예제] 형 변환
a = "100" # 100 문자열 정의
f = float(a) # 문자열 변수를 float 형으로 변환

print(type(f))
print(f)

[결과]
<class 'float'>
100.0

 

IV. 객체 변경 가능 여부 확인

  • 형 변환이 가능한 클래스는 내부 스페셜 메소드인 “__setitem__” 메소드가 있음
  • [예제] 원소 변경 불가능 사례 (str)
str.__dict__['__getitem__'] # 문자열 클래스 색인 연산 확인
str.__dict__['__setitem__'] # 문자열 클래스 변경 연산 확인

[결과]
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    str.__dict__['__setitem__'] # 문자열 클래스 변경 연산 확인
KeyError: '__setitem__'
  • [예제] 원소 변경 가능 사례 (list)
list.__dict__['__getitem__'] # list 클래스 색인 연산 확인
list.__dict__['__setitem__'] # list 클래스 변경 연산 확인

a = [1, 2, 3]
a.__setitem__(0, 10) # 0번째 원소를 변경

print(a)

[결과]
[10, 2, 3]

 

[참고]

  • 잇플, “한 권으로 개발자가 원하던 파이썬 심화 A to Z”, 2019.11

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^