Типы данных в языке Python
Говоря о типах данных, стоит упомянуть, что Python - язык с неявной сильной динамической типизацией (подробнее о видах типизации в языках программирования).
Каждое значение в Python имеет тип данных. Поскольку в Python все является объектом, типы данных на самом деле являются классами, а переменные являются экземплярами (объектами) этих классов.
На аппаратном уровне переменная — это ссылка на место в памяти.
Числовые типы (Numeric Types)
Существует три базовых числовых типа: int, float, complex.
Integer
int - целые числа. Отрицательные и положительные числа любой длины (ограничением является только количество памяти).
| |
Float
float - числа с плавающей точкой, отрицательные или положительные, содержащие десятичную точку или символ экспоненты e (показатель возведения в степень 10: 35e3, 12E4). Точность до 15 знаков после запятой.
float может принимать значения nan и inf/-inf.
| |
Complex
complex - комплексные числа (x+yj, где x - действительная часть, y - мнимая часть, а j - мнимая единица).
| |
Long
long - использовался для представления больших целых чисел.
Кроме того,
booleanявляется подтипомint.
Логический тип (Boolean Type)
В булевом типе данных есть только два типа значений: True и False (встроенные константы чувствительные к регистру).
| |
Функция приведения типа bool() позволяет оценить любое значение и вернуть True или False.
В Python истинными и ложными значениями считаются не только True и False:
Истинное значение:
- любое ненулевое число
- любая непустая строка
- любой непустой объект
Ложное значение:
- 0
- None
- пустая строка
- пустой объект
Последовательности (Sequence Type)
К ним относятся основные:
str(строка)list(список)tuple(кортеж)range(диапазон)
и бинарные:
bytes(байтовая строка)bytearray(байтовый массив)memoryview(специальные объекты для доступа к внутренним данным объекта черезprotocol buffer).
Как и все типы данных, последовательности делятся на изменяемые (mutable) и неизменяемые (immutable).
Операции, поддерживаемые большинством последовательностей (изменяемых и неизменяемых):
| |
hash() - единственная операция, реализованная в неизменяемых типах последовательностей и отсутствующая в изменяемых. Это позволяет использовать неизменяемые последовательности, такие как экземпляры кортежей, в качестве ключей словаря и хранить их в set и frozenset.
Операции над изменяемыми последовательностями:
| |
Строка (string)
Cтрока (str) - это неизменяемая упорядоченная последовательность символов Юникода. В питоне нет символьного типа данных char, символ представляет собой строку одинарной длины. Строку можно создать различными способами:
| |
Для строк доступны общие операции c последовательностями, а так же дополнительные методы встроенного класса str().
Список (list)
Список (list) — это изменяемая упорядоченная последовательность, обычно используемая для хранения коллекций однородных элементов. Поскольку списки индексируются, то могут содержать элементы с одинаковым значением.
| |
Кортеж (tuple)
Кортеж (tuple) — это неизменяемая упорядоченная последовательность, обычно используемая для хранения коллекций разнородных элементов. Также используются в случаях, когда требуется неизменяемая последовательность однородных данных (например, использование в экземпляре set или dict).
Кортежи, как правило, быстрее, чем списки в Python.
| |
Диапазон (range)
Тип range представляет собой упорядоченную неизменяемую последовательность чисел и обычно используется для выполнения определенного количества раз циклов for.
Для диапазонов доступны общие операции с последовательностями, кроме конкатенации и повторения.
Проверка диапазонов range на равенство с == и != сравнивает их как последовательности.
Атрибуты
start, stop и step.
Байтовые строки (bytes)
Тип данных bytes - это упорядоченная неизменяемая последовательность отдельных байтов. Синтаксис для байтовых строк в основном такой же, как и для обычных строк, за исключением того, что добавляется префикс b.
Байтовый массив (bytearray)
Bytearray объекты являются упорядоченным неизменяемым аналогом bytes.
Буфер обмена (memoryview)
Объекты memoryview позволяют коду Python получать доступ к внутренним данным объекта, который поддерживает буферный протокол, без копирования.
Множества (Set Types)
Множество - это неупорядоченный набор различных хешируемых объектов. Обычно множества используются для проверки вхождения элемента, удаления дубликатов из последовательности и вычисления математических операций, таких как пересечение, объединение, разность и т. д.
Будучи неупорядоченной коллекцией, множества не сохраняют положение элемента или порядок вставки. Соответственно, не поддерживают индексы, срезы или другое поведение, подобное упорядоченной последовательности.
Существует два встроенных типа множеств: set и frozenset.
Множество (set)
Тип set является изменяемым множеством, содержимое может быть изменено с помощью таких методов, как add() и remove(), так же поддерживает операции доступные frozenset. Поскольку тип set является изменяемым, он не имеет хеш-значения и не может использоваться ни как ключ словаря, ни как элемент другого множества.
| |
Неизменяемое множество (frozenset)
Тип frozenset является неизменяемым и хешируемым множеством, его содержимое не может быть изменено после его создания, поэтому он может использоваться как ключ словаря или как элемент другого множества.
| |
Словарь (dict)
Словарь (dict) — это упорядоченная, изменяемая коллекция пар ключ: значение, в которой не допускается дублирование ключей.
- Ключи словаря - это произвольные, неизменяемые (хешируемые) значения.
- Значения элементов словаря могут иметь любой тип данных.
Словари стали упорядоченными.
Словари и объекты представления словаря
dict.keys(), dict.values(), dict.items() теперь обратимы.
Словарь может быть создан несколькими способами:
| |
В других языках программирования тип данных подобный словарю может называться ассоциативный массив, хеш или хеш-таблица.
Изменяемые и неизменяемые типы данных
В Python существуют изменяемые и неизменяемые типы.
Неизменяемые: int, float, complex, bool, tuple, str, frozenset.
Изменяемые: list, set, dict.
При создании переменной, вначале создается объект, который имеет уникальный идентификатор, тип и значение, после этого переменная может ссылаться на созданный объект.
Неизменяемость типа данных означает, что созданный объект больше не изменяется. Например, если мы объявим переменную k = 15, то будет создан объект со значением 15, типа int и идентификатором, который можно узнать с помощью функции id().
| |
Объект с id = 1672501744 будет иметь значение 15 и изменить его уже нельзя.
Если тип данных изменяемый, то можно менять значение объекта. Например, создадим список [1, 2], а потом заменим второй элемент на 3.
| |
Другие встроенные типы
ModulesClassesClass InstancesFunctionsMethodsCode ObjectsType Objects
| |
The Null Object-NoneЭтот объект возвращается функциями, которые явно не возвращают значение. Он не поддерживает специальные операции. Существует ровно одинnullобъект с именемNone(встроенное имя).type(None)()создает один и тот же сиглтон.The Ellipsis Object-Ellipsisили...Этот объект обычно используется для срезов. Он не поддерживает специальные операции. Существует ровно один объект многоточия с именемEllipsis(встроенное имя).type(Ellipsis)()создает сиглтонEllipsis.The NotImplemented ObjectInternal Objects
Источники:
Python documentation - Built-in Types