В чем разница между определениями: контейнер, коллекция и структура данных в Python?

Рейтинг: 3Ответов: 2Опубликовано: 01.03.2023

Я учу Python. Знаю что существуют типы данных, и что каждый тип из себя представляет. Понимаю что есть структуры данных, это программные единицы которые могут содержать в себе другие данные и они одновременно являются типами тоже. Но в разных источниках, информация по-разному дается. И не понимаю в чем разница между коллекциями, структурами и контейнерами. Все они содержат те же list, dict, set, tuple, frozenset, по крайней мере если не использовать другие зависимости... Когда нужно использовать определение контейнер, структуру или коллекцию?

Ответы

▲ 1Принят

Так, навскидку:

  • контейнер: объект, содержащий в себе другие объекты, причём тут нет никаких других условий - что это за объекты, упорядочены ли они как-то, просто объект с другими объектами внутри
  • структура: объект, имеющий чётко обозначенный (структурированный) список полей (объектов) внутри себя, т.е. можно сказать, что это контейнер, но с неким структурированным (тут надо бы подобрать синоним, но что-то не придумаю) содержимым
  • коллекция: упорядоченный тем или иным способом набор объектов, который мы можем перебирать некоторым стандартным способом (например, с помощью цикла for), по сути это опять же снова контейнер, и даже можно сказать структура с определёнными свойствами
▲ 3

Я бы сказал так:

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

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

Термин "коллекция" подразумевает объект, который вмещает в себя именно множество других объектов (обычно - однотипных) и предоставляет возможность работы с содержимым именно как с неким множеством элементов, которые можно обрабатывать однотипно. Например, коллекция почти всегда подразумевает возможность итерации по содержимому.