namedtuple이란?

namedtuple에 대해 알아보자

지난번에 itertuples() 사용했을 때 결과물 반환형태가 공식문서에 ‘namedtuple’이라고 나와있었다.

처음 본 용어라 공부하면서 찾아본 내용을 정리해보았다.

그리고 정리하면서 느낀건데 역시 공식문서가 짱인것 같다👍


📍Tuple?

우선 Tuple 자료구조는 ‘()’ 형태로 사용한다. (리스트는 ‘[]’)

불변한 순서가 있는 객체로, 생성되면 값을 변경할 수 없다는 특징이 있다.

튜플은 튜플에 있는 요소를 접근할 때 인덱스 번호로 접근해야한다는 단점이 있다.

이러한 단점을 해소할 수 있는게 오늘 정리할 namedtuple이다.

📍Namedtuple?

namedtuple은 collections 모듈 아래에 존재하고 있다.

객체에 인스턴스를 생성하듯이 튜플을 생성하여 각 원소에 이름으로 접근이 가능한 튜플을 의미한다.

각 튜플 값에 이름으로 접근할 수 있기때문에 일반 튜플보다 직관적으로 접근할 수 있다는 장점이 있다.

지난번에 속도개선을 위해 itertuples를 사용했는데, 일반적으로 튜플형식이 리스트보다 메모리 효율이 좋다고 한다!!

✔️ Namedtuple 사용방법은?

nametuple 선언방법은 3가지가 존재하는것 같다.

  • 리스트형태
Point = namedtuple('Point',['x','y']) # x,y는 filed_name
  • 띄어쓰기 구분
Point = namedtuple('Point','x y')
  • 콤마 구분
Point = namedtuple('Point','x,y')


여기에 추가적으로 옵션이 존재한다.

✅ rename 옵션

rename옵션은 튜플 속성명이 중복으로 입력되거나, 예약어로 입력될 경우 자동으로 이름을 변경해주는 옵션이다!

Point = namedtuple('Point','x y x abc def', rename=True)
>>>> p1 = Point(2,3,4,5,6)
>>>> print(p1)
Point(x=2, y=3, _1=4, abc=5, _2=6) # x는 중복, def는 예약어라서 자동으로 변환됨

✅ default 옵션

default옵션은 namedtuple 생성 시 튜플속성에 대한 기본값을 설정하는 옵션인듯

Point = namedtuple('Point',['x','y'], default=0)
>>>> p1 = Point(2)
>>>> print(p1)
Point(x=2, y=0)

✔️ Namedtuple 메서드 종류

  • _make : 새로운 객체 생성할 때 사용
>>>> t = [11,22]
>>>> Point.make(t)
Point(x=11,y=22)
  • _asdict() : dictionary 형태로 변환할 때 사용 (OrderedDict 반환)
>>>> t = [11,22]
>>>> Point.make(t)
Point(x=11,y=22)
  • _replace() : 값 변경할 때 사용 (튜플은 값을 변경할 수 없기 때문에, 변경된 값이 반영된 새로운 객체 반환)
>>> p1 = Point(x=11, y=22)
>>> p1._replace(x=33)
Point(x=33, y=22)

  • _fields() : 튜플 속성명 출력 시 사용
>>>>  p1._fields
('x', 'y')
  • _field_defaults() : 튜플 기본값 출력 시 사용
Point = namedtuple('Point',['x','y'], default=0)
>>>> print(p1._field_defaults)
{'x':0, 'y':0}


👀 참고

파이썬 공식문서

Python Namedtuple Example 및 사용법

TIL10. Python : NamedTuple 이란?