namedtuple лучше обычных туплов тем, что к полям тупла можно обращаться по имени, легко добавлять к типу новые поля и удалять.
namedtuple лучше словарей/объектов тем, что не расходуют память на имена полей в каждом объекте.
Использование такое:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y']) # Point будет типом, как dict или int
p = Point(1,2)
print p.x, p.y
Померял сколько памяти занимает миллион пар-туплов, с несколькими вариантами - словари, объекты, обычные туплы.
64-битный python 2.7, память смотрел в утилите top (RES), примитивным кодом - https://gist.github.com/dobrokot/7416c65c557fd8260176
8m - 32-bit числа, минимальный размер массива 21m - 32-bit числа, реальное потребление на numpy-массив + оверхед на интерпретатор 16m - 64-bit числа, минимальный размер массива 28m - 64-bit числа, реальное потребление на numpy-массив + оверхед на интерпретатор 13m - запуск интерпретатора с import numpy 67m - two arrays 130m - tuple 139m - namedtuple 334m - dict 405m - class
Вывод: namedtuple - хороший выбор по умолчанию для массивов однотипных объектов, если отказываться от синтаксиса object.field и от питона не хочется, а привязка к размеру и порядку полей в тупле вызывает тошноту и проблемы поддержки программы.