Конструкторы множеств

Для того чтобы создать список можно вызвать специальный конструктор списков. На самом деле когда вы проверяете тип объекта с помощью вызова type(obj), то вы видите, что-то типа:

>>> type(['a', 'b', ])
<class 'list'>

Проверка типа говорит, что этот объект является экземпляром класса list. А для того чтобы создать новый экземпляр класса надо вызвать его конструктор который работает так: вы вызываете имя класса и передаете ему параметры. Иногда параметров много, иногда ни одного. Для каждого типа в Python'е есть свой собственный класс. И когда мы конвертировали строки в числа, то вызывали специальный конструктор класса со строкой в качестве параметров: int('11'). Мы точно так же можем воспользоваться конструктором класса list для того чтобы создать новый список. В качестве параметров можно передать объекты которые может принимать конструктор. Например конструктору целых чисел int нельзя передать строку состоящую не из символов чисел:

>>> int('десять')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'десять'

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

Сравнение типов последовательностей

Давайте быстро подведем итоги и сравним отличия списков, кортежей, множеств и строк, которые тоже ведут себя как множества:

Пункты сравнения Список Кортеж Set Строка Словарь
Назначение Хранить разные элементы Хранить неизменный список Хранить уникальные элементы Хранить текстовые строки Коллекции с доступом по ключу
Создание Квадратные скобки [] Круглые скобки () Фигурные скобки {} Кавычки ',", ''', """, r", b" {ключ: значение, ...}
Конструктор list() tuple() set() или frozenset() str() dict()
Срезы Доступны Доступны Не доступны Доступны Не доступны
Мутабельность Да Нет set — Да, frozenset — Нет Нет Да
Может быть ключом словаря Нет Да set — Нет, frozenset — Да Да Нет
Особенности Можно сортировать Неизменяемый Есть операции для множеств Есть методы для изменения строк Вместо индекса ключ, сохраняет порядок ключей
Генератор [x for x in range(10)] Нет Нет Нет {x: x*2 for x in range(10)}
Создание итераторов (x for x in range(10)) или iter(seq) Есть iter(seq) Есть iter(seq) Есть iter(seq) Есть, iter(seq) создаст итератор по ключам

Работа с бинарными последовательностями

Я осознанно оставляю без внимания встроенные типы bytes и bytearray. По своему поведению они не сильно отличаются от тех типов с которыми мы уже познакомились, но используются в более специфичных случаях. Но если вам интересно, то прочитайте в стандартной документации о них поподробнее Binary Sequence Types — bytes, bytearray, memoryview.