Типы данных в Python 3
Тип данных определяет, что можно делать со значением: складывать, менять по индексу, использовать как ключ словаря. Здесь вы познакомитесь со всеми основными встроенными типами Python, научитесь извлекать элементы из коллекций и преобразовывать один тип в другой.
Материал актуален для Python 3.12 и 3.13. В добавленном разделе собрана сводная таблица, которая отвечает на главные практические вопросы: какой тип изменяемый, какой сохраняет порядок, что можно сделать ключом словаря. Там же разобраны типы bool и None и правильная проверка типа через isinstance().

Содержание статьи
s = 10 print(s, "имеет тип данных", type(s)) q = 6.7 print(q, "имеет тип данных", type(q)) результат: 10 имеет тип данных <class 'int'> # Как видим, функция type() показывает нам к какому классу(типу данных), принадлежит значение нашей переменной 6.7 имеет тип данных <class 'float'>
Числа в Python
s = 10
print(s, "имеет тип данных", type(s))
q = 6.7
print(q, "имеет тип данных", type(q))
результат:
10 имеет тип данных <class 'int'> # Как видим, функция type() показывает нам к какому классу(типу данных), принадлежит значение нашей переменной
6.7 имеет тип данных <class 'float'>
Целочисленные значения (int) в Python могут иметь любую длину, она ограничивается только доступной памятью. А числа с плавающей запятой, имеют точность до 15 знаков, все что будет дальше, будет усечено при выводе. При работе с числовыми типами данных в Python, вы всегда может использоваться математические знаки, для сложения, вычитания, деления или умножения.
Список в Python
Список - это последовательность элементов. Одним из наиболее часто используемых типов данных является список. Тип данных "Список", уникален тем, что он может содержать различные типы данных. Пример работы со списками:
i = [1,2,43,67,42,"pydocs"] # Объявления списка, в квадратных скобках заключаем нужные нам данные, как видите, мы одновременно можем хранить в списках разные тиы данных
Из списка всегда можно извлечь нужный элемент,или целый диапазон элементов, для этого используется оператор [ ]. Индекс в Python, всегда начинается с 0.
i = [2,4,6,8,10,12,14,16,18,20] # Список
# Получаем например 4-ый элемент списка
print(i[4])
результат: 10
#а теперь попробуем получить диапазон элементов
print(i[0:4])
результат: [2,4,6,8]
Важно запомнить! Значение элементов списки могут меняться.
Кортежи в Python
Кортежи - это практически те же самые списки, с разницей в том, что данные в кортежах менять нельзя. Если списки мы определяли [ ],то кортежи определяются круглыми скобками ( ),и так же как и в списках элементы разделяются запятыми. Пример:
i = (10,"pydocs",26)
Как мы уже поняли, значения в кортеже менять нельзя, но извлекать данные, нам никто не запрещал. Данные извлекаются практически так же, как и в обычном списке. Попробуем извлечь данные, и так же попробуем изменить значение, и посмотрим что у нас выйдет.
i = (10,15,25,"pydocs")
print(i[1]) #выводим второй элемент (индекс начинает с 0)
print(i[0:2])# Выводи диапазон элементов
i[0] = 30 # в данном случае мы просим Python поменять значение первого элемента
Результат: TypeError: 'tuple' object does not support item assignment
Строки в Python
Строка - это последовательность символов. Строки заключаются в одинарные, или двойные кавычки, многострочные строки заключаются в тройные кавычки.
s = "Это строка"
print (s)
i = ''' Это многострочная
строка'''
print(i)
Так же как и в списках и кортежах, в строках работает знакомый нам оператор [ ], но стоит помнить, что строки неизменны.
s = "Hello world"
print (s[2])
#s[2] = 'l'
print (s[6:11])
#s[6:11] = "world"
# При попытке изменить значение в строке, мы получим ошибку
s[3] = 'k'
TypeError: 'str' object does not support item assignment
Множества в Python
Множества - это тип (класс) set, это набор из неупорядоченных элементов, разделенных между собой запятыми, внутри фигурных скобок { }. Над множествами можно выполнять различные операции, объединение, находить пересечения двух множеств, или устранения дубликатов.
a = {1,3,5,4,2} #Неупорядоченные элементы
print(a)
print(type(a))
результат:
{1, 2, 3, 4, 5} # При выводе, мы уже наблюдаем порядок
<class 'set'>
a = {2,2,3,3,4,4,5,5,6,6,7,7} # дубликаты элементов
print(a)
результат:
{2,3,4,5,6,7} # при выводе, дубликаты отбрасываются
Важно запомнить!Так как множества имеют неупорядоченную последовательность, то в данном случае индексация не имеет смысла, и соответственно оператор [ ] тут не работает.
Словари в Python
Словарь в Python - это коллекция пар ключ-значение, которая с Python 3.7 сохраняет порядок добавления элементов, которая имеет вид "key:value", определяется словарь так же, как и множества фигурными скобками. Словари используются для быстрого доступа к данным по ключу. Внутри словаря можно получить значение, зная его ключ. Важно запомнить! Ключ и его значение. могут иметь различные типы данных.
d = {10:"value", "key":3}# Как видите мы можем комбинировать числа и строки
print (type(d))
# Мы используем ключ, для получения привязанного к нему значения, но не НАОБОРОТ
print(d[10]) #обращаемся к ключу, и получаем его значение, в данном случае значение "value"
print(d['key']) # В данном случае, значение 3
Результат:
<class 'dict'>
d[10] = 'value'
d['key'] = 3
При попытке обращения к несуществующему ключу, Python вернет нам ошибку KeyError
Преобразования типов данных в Python
Различные типы данных, мы можем преобразовывать в другие типы данных.
float(5)# Преобразовываем целое число в дробное
5.0
int(10.2) # преобразовываем дробное в целое число
10
Мы так же можем преобразовывать и строки, если они содержат совместимые значения.
float('1.4')#Преобразовываем строку в дробное значение
1.4
str(11) # Целое число в строку
'11'
# При попытке преобразовать несовместимые значения, мы получим ошибку
int ('hello 21')
ValueError: invalid literal for int() with base 10:
Python так же позволяет преобразовывать множества, кортежи, списки, и словари.
set([1,1,2,2,3,3]) #передаем во множество список
{1, 2, 3} # получаем набор элементов без дубликатов (порядок во множестве не гарантирован)
tuple({5,6,7})# Передаем в кортеж множества
(5,6,7) # получаем кортеж
list ('hello') #передаем в список строку
['h','e','l','l','o'] # получаем список
С типами данных в Python 3, можно по глубже ознакомиться на сайте Python c официальной документацией
Следующий урок: Ввод, вывод и импорт
Сводная таблица встроенных типов
При выборе структуры данных важны три свойства. Изменяемость: можно ли менять объект после создания. Упорядоченность: сохраняется ли порядок элементов. Хешируемость: можно ли использовать объект как ключ словаря или элемент множества.
| Тип | Пример | Изменяемый | Порядок | Может быть ключом |
|---|---|---|---|---|
int, float | 42, 3.14 | нет | - | да |
str | "abc" | нет | да | да |
tuple | (1, 2) | нет | да | да, если внутри неизменяемые |
list | [1, 2] | да | да | нет |
dict | {"a": 1} | да | да, порядок вставки | нет |
set | {1, 2} | да | нет | нет |
frozenset | frozenset({1, 2}) | нет | нет | да |
bool | True | нет | - | да |
NoneType | None | нет | - | да |
Словари сохраняют порядок добавления ключей начиная с Python 3.7, это гарантия языка. Множества порядок не гарантируют: маленькие целые числа часто выводятся отсортированными, но на строках порядок может меняться от запуска к запуску.
bool и None
bool является подклассом int, поэтому True + True равно 2, а sum([True, False, True]) удобно считает количество выполненных условий. None обозначает отсутствие значения: его возвращает функция без return. Проверяют его через is: if result is None.
Проверка типа через isinstance
value = True
print(type(value) == int) # -> False
print(isinstance(value, int)) # -> True, bool наследует int
print(isinstance(3.0, int | float)) # -> True, запись через | работает с Python 3.10
type() удобен для вывода в консоль, а в условиях используйте isinstance(): он учитывает наследование и принимает сразу несколько типов. Но не злоупотребляйте проверками: если функция ожидает что-то итерируемое, часто проще просто перебрать значение и обработать исключение, чем перечислять все подходящие типы заранее.
Точность float
print(0.1 + 0.2) # -> 0.30000000000000004
print(0.1 + 0.2 == 0.3) # -> False
import math
from decimal import Decimal
print(math.isclose(0.1 + 0.2, 0.3)) # -> True
print(Decimal("0.1") + Decimal("0.2")) # -> 0.3
Числа float хранятся в двоичном виде и дают около 15-17 значащих цифр. Для сравнения используйте math.isclose(), а для денег модуль decimal. Подробнее о числах читайте в статье Числа в Python 3.
Частые вопросы
Ответы на типичные вопросы читателей, которые помогут избежать частых ошибок.
Как узнать тип переменной в Python?
Вызовите type(x), например type(3.5) вернет <class 'float'>. Для проверки в условии используйте isinstance(x, float), она корректно работает с наследниками.
Почему список нельзя сделать ключом словаря?
Ключ должен быть хешируемым, а значит неизменяемым: если бы содержимое ключа поменялось, словарь не нашел бы его. Преобразуйте список в кортеж: d[tuple(items)] = value.
Чем список отличается от кортежа на практике?
Список меняют: добавляют и удаляют элементы. Кортеж фиксирован, поэтому подходит для записей с постоянной структурой вроде координат и может быть ключом словаря. Кортеж также занимает чуть меньше памяти.
Как преобразовать строку с запятой в число?
float("1,4") вызовет ValueError, Python понимает только точку. Замените запятую: float("1,4".replace(",", ".")).