Типы данных в языке 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
.
|
|
Другие встроенные типы
Modules
Classes
Class Instances
Functions
Methods
Code Objects
Type Objects
|
|
The Null Object
-None
Этот объект возвращается функциями, которые явно не возвращают значение. Он не поддерживает специальные операции. Существует ровно одинnull
объект с именемNone
(встроенное имя).type(None)()
создает один и тот же сиглтон.The Ellipsis Object
-Ellipsis
или...
Этот объект обычно используется для срезов. Он не поддерживает специальные операции. Существует ровно один объект многоточия с именемEllipsis
(встроенное имя).type(Ellipsis)()
создает сиглтонEllipsis
.The NotImplemented Object
Internal Objects
Источники:
Python documentation - Built-in Types