본문 바로가기

개념

[파이썬] namedtuple 이란

파이썬의 namedtuple은 튜플(tuple)과 딕셔너리(dictionary)의 기능을 합쳐 놓은 자료형입니다.

튜플은 순서가 있는 데이터 집합이며, 한 번 생성된 후에는 수정이 불가능합니다. 딕셔너리는 순서가 없는 key-value 쌍의 데이터 집합입니다. namedtuple은 이 둘의 장점을 모두 갖추고 있습니다.

 

1. 예시


namedtuple은 collections 모듈에서 제공됩니다. 간단한 예시를 통해 사용 방법을 살펴보겠습니다.

 

from collections import namedtuple

Person = namedtuple('Person', ['name', 'age', 'gender'])

person1 = Person('Alice', 25, 'Female')
person2 = Person('Bob', 30, 'Male')

print(person1)
print(person2.name)
print(person2.age)
print(person2.gender)

 

namedtuple 함수는 첫 번째 인자로 클래스 이름을, 두 번째 인자로는 필드 이름의 리스트나 튜플을 전달합니다. 이 예시에서는 'Person'이라는 클래스 이름과 'name', 'age', 'gender'라는 필드 이름을 가진 namedtuple을 생성했습니다.

person1과 person2는 이제 Person 클래스의 객체입니다. 객체를 생성할 때 필드 이름에 해당하는 값을 인자로 전달해야 합니다.

namedtuple 객체의 필드는 인덱스로도 접근할 수 있지만, 필드 이름으로도 접근할 수 있습니다. 따라서 위 코드에서는 person2 객체의 필드 이름에 해당하는 값을 각각 출력하고 있습니다.

namedtuple은 딕셔너리와 마찬가지로 key-value 쌍으로 데이터를 저장하지만, 키 대신 필드 이름을 사용합니다. 또한, 튜플처럼 한 번 생성된 후에는 수정이 불가능합니다. 이러한 특징으로 인해, namedtuple은 데이터 집합의 구조가 변하지 않는 경우에 유용하게 사용됩니다.

 

2. 주의사항

 

namedtuple을 사용할 때 주의해야 할 점은 다음과 같습니다.

  • 필드 이름으로 유효하지 않은 식별자를 사용하지 않도록 주의해야 합니다. 필드 이름은 식별자(변수, 함수 이름 등)로 사용됩니다. 따라서 유효한 식별자만 사용해야 합니다.
  • 필드 이름은 유일해야 합니다. namedtuple 객체의 필드 이름은 딕셔너리의 키와 같이 유일해야 합니다. 중복된 필드 이름이 있다면 AttributeError가 발생합니다.
  • 필드 이름에 띄어쓰기나 특수문자 등을 사용하지 않도록 주의해야 합니다. 필드 이름은 소문자와 언더스코어(_)로 구성된 문자열을 사용하는 것이 좋습니다.
  • namedtuple은 한 번 생성된 후에는 수정할 수 없습니다. 따라서 객체를 생성할 때 반드시 모든 필드에 값을 지정해야 합니다.
  • namedtuple 객체는 튜플처럼 인덱싱을 지원합니다. 따라서 namedtuple 객체의 필드 순서를 바꾸면 예기치 않은 결과가 발생할 수 있습니다. 필드 순서를 변경하려면 새로운 namedtuple 객체를 생성해야 합니다.
  • namedtuple 객체는 일반적인 튜플보다 약간 더 많은 메모리를 사용합니다. 필요에 따라 namedtuple 대신 일반 튜플을 사용하는 것이 더 효율적일 수 있습니다.