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