Разница между именованным набором и замороженным диктом - PullRequest
4 голосов
/ 01 апреля 2012

Я знаю, что нет замороженного типа данных dict, но если бы он был, чем бы он отличался от namedtuple.Мне кажется, что namedtuple выполняет необходимые операции, но, очевидно, это не так.Так в чем же различия?

Ответы [ 2 ]

10 голосов
/ 01 апреля 2012

С точки зрения API, вероятно, не так много, хотя:

  • namedtuple ключи всегда являются строками с некоторыми ограничениями:

Любой допустимый идентификатор Pythonможет использоваться для имени поля, за исключением имен, начинающихся с подчеркивания.Допустимые идентификаторы состоят из букв, цифр и знаков подчеркивания, но не начинаются с цифры или знака подчеркивания и не могут быть ключевыми словами, такими как class, for, return, global, pass или повышение.

  • namedtuple s всегда доступны как обычные кортежи.

Внутренне они очень разные:

Именованные экземпляры кортежей не имеют словарей для каждого экземпляра, поэтому ониони легкие и не требуют больше памяти, чем обычные кортежи.

0 голосов
/ 01 апреля 2012

Разница проста: A Dictionary не является Tuple.Это две совершенно разные структуры данных.

...