본문 바로가기
프로그래밍 이야기/Python

[Python] 타입 힌트에서 List와 list의 차이

by meticulousdev 2022. 4. 3.
반응형

목차

1. 대문자와 소문자

2. 자료형이요?

3. What's New In Python 3.9

 

1. 대문자와 소문자

    파이썬에서 타입 힌트를 자주 사용하다보니 궁금했던 사항이 있었습니다. 대문자로 시작하는 List는 소문자로 시작하는 list와 무엇이 다를까요?  오늘은 이 질문에 대한 짧은 글을 써보려고 합니다. 

 

2. 자료형이요?

    list는 자료형입니다. 간단하게 타입이 무엇인지 출력해보면 그냥 간단하게 '타입(type)'이라고 나옵니다. 비교를 위해서 int에 대한 출력도 첨부했습니다.

 

from typing import List


print(f"type(list): {type(list)}")
print(f"type(int) : {type(int)}")
print(f"type(List): {type(List)}")
type(list): <class 'type'>
type(int) : <class 'type'>
type(List): <class 'typing._SpecialGenericAlias'>

 

정말 말그대로 타입인 것입니다. 반면에, List는 어떨까요? typing._SepcialGenericAlias라고 하는 타입 힌트의 일종이라고 알려줍니다. 이와 같이 둘은 서로 다르기 때문에 사용도 명확하게 구분이 되어있었습니다 (~ python 3.8).

 

- list는 기본적으로 형변환을 위해서 사용될 수 있습니다. 그리고 타입힌트로 사용할 수 있지만, 리스트에 들어갈 데이터의 자료형을 명시해 줄 수는 없습니다. (~ python 3.8).

- List는 타입 힌트의 일종이기에 타입 힌트를 알려줄때 사용할 수 있고, 리스트에 들어갈 데이터의 자료형을 명시해 줄 수 있습니다.

 

그렇기 때문에 아래와 같이 코드를 작성했을때는 오류 없이 실행됩니다.

# python 3.8.13
test_list: list
test_List: List

 

하지만 list를 다음과 같이 작성하고 실행하면 TypeError가 발생합니다.

# python 3.8.13
test_list: list[float]
Exception has occurred: TypeError
'type' object is not subscriptable
    Test_list: list[float]

 

하지만 python 3.9 버전이 나오면서 상황이 바뀌었습니다. list로도 List와 동일하게 리스트 안에 들어갈 데이터의 자료형을 명시하며 타입힌트로 사용할 수 있게된 것입니다.

 

3. What's New In Python 3.9

    다음은 공식문에 올라온 python 3.9의 업데이트 내용입니다.

Type Hinting Generics in Standard Collections
In type annotations you can now use built-in collection types such as list and dict as generic types instead of importing the corresponding capitalized types (e.g. List or Dict) from typing.
- https://docs.python.org/3/whatsnew/3.9.html

 

Python 3.9부터는 리스트와 딕셔너리의 타입힌트를 위해서 ListDict을 따로 import해주지 않고 listdict으로 타입힌트의 사용이 가능하다는 것입니다. 그렇기 때문에 위의 예제를 실행할때 인터프리터를 python 3.9로 변경하고 실행해보면 아무 오류가 발생하지 않습니다.

 

# python 3.9.7
test_list: list[float]
test_List: List[float]

 

- 같이 읽으면 좋은 글

https://meticulousdev.tistory.com/entry/PYTHON-TypeVar-그리고-Generic

 

[PYTHON] TypeVar 그리고 Generic

1. 데이터 타입의 일반화 파이썬 코드를 보다 보면 T = TypeVar(‘T’)과 Generic이라는 표현을 종종 보게 된다. T = TypeVar(‘T’)를 먼저 살펴보면 T는 형 변수(type variable)이고 ‘T’는 형 변수의 이름(var

meticulousdev.tistory.com

 

긴 글 읽어주셔서 감사합니다. 
글과 관련된 의견은 언제든지 환영입니다.

 

반응형

댓글