Типы данных в Python: полный обзор и примеры

Раздел: Типы данных -> Основные типы данных

Категории встроенных типов

Python предлагает богатый набор встроенных типов данных, которые можно разделить на несколько категорий: числовые, последовательности, множества, отображения, логический и специальный тип None. Каждый тип имеет свои особенности, методы и правила использования. Ниже приведен обзор с примерами.

Числовые типы

Целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex). Все они поддерживают арифметические операции.

a = 10
b = 3.14
c = 1 + 2j
d = a + b  # 13.14
print(c.real, c.imag)  # 1.0 2.0

Python callable object (вызываемый объект в python)

Для комплексных чисел доступны атрибуты real и imag.

Последовательности

Строки (str), списки (list), кортежи (tuple), range, bytes, bytearray. Они поддерживают индексацию, срезы и итерацию.

s = 'hello'
l = [1, 2, 3]
t = (10, 20)
r = range(5)
b = b'abc'
ba = bytearray([100, 101, 102])
print(l[1])  # 2
print(s[1:4])  # ell
print(list(r))  # [0,1,2,3,4]

Int object python (объект int в python)

Множества

Set и frozenset. Set изменяемый, frozenset неизменяемый и хешируемый.

myset = {1, 2, 3}
fset = frozenset([4, 5, 6])
myset.add(4)
print(myset)  # {1,2,3,4}

встроенные типы python (встроенные типы python)

Отображения

Словарь (dict) хранит пары ключ-значение. Ключи должны быть хешируемыми.

d = {'name': 'Alice', 'age': 30}
print(d['name'])  # Alice
for k, v in d.items():
    print(k, v)

Логический и None

Тип bool (True/False) и NoneType (None). None используется для обозначения отсутствия значения.

flag = True
val = None
print(type(flag))  # 
print(val is None)  # True

Как выбрать между list и tuple?

Список (list) изменяемый, кортеж (tuple) неизменяемый. Если данные не планируется изменять, лучше использовать кортеж. Это делает код безопаснее и позволяет использовать кортеж в качестве ключа словаря.

coord = (10, 20)  # кортеж
coord[0] = 5  # ошибка TypeError
Попытка изменить кортеж вызывает TypeError. Если нужен изменяемый список, используйте list.

Когда использовать set вместо list?

Set обеспечивает быстрое удаление, добавление и проверку принадлежности. Не сохраняет порядок. Используйте set для уникальных элементов и операций вроде пересечения, объединения.

a = [1,2,2,3]
unique = set(a)  # {1,2,3}
print(1 in a)  # True
Set нельзя использовать как ключ в dict или элемент другого set (кроме frozenset). Также set не является JSON сериализуемым по умолчанию.

Как преобразовать строку в число и обратно?

Функции int() и float() преобразуют строку в число. str() преобразует число в строку. Важно, что строка должна содержать корректное числовое представление.

s = '42'
n = int(s)  # 42
f = float('3.14')  # 3.14
print(str(n + f))  # '45.14'
Если строка не является числом (например, 'abc'), int() вызовет ValueError. Обрабатывайте исключение или используйте проверку isdigit().

Как создать словарь с использованием dict comprehension?

Dict comprehension позволяет быстро создать словарь на основе итерируемого объекта.

squares = {x: x**2 for x in range(6)}
print(squares)  # {0:0, 1:1, 2:4, 3:9, 4:16, 5:25}
Если ключи не хешируемы (например, список), возникнет TypeError. Ключ должен быть неизменяемого типа.

Расширенные примеры использования встроенных типов

Ниже приведены более сложные и неочевидные примеры работы с встроенными типами.

Комплексные числа и модуль cmath

Пример
import cmath
z = 3 + 4j
print('Амплитуда:', abs(z))
print('Фаза:', cmath.phase(z))
print('Комплексное сопряжение:', z.conjugate())
Амплитуда: 5.0
Фаза: 0.9272952180016122
Комплексное сопряжение: (3-4j)

Работа с bytes и кодировками

Пример
text = 'Hello'
b = text.encode('utf-8')
print(b)  # b'Hello'
back = b.decode('utf-8')
print(back)  # Hello
b'Hello'
Hello

Использование memoryview для изменения bytearray

Пример
ba = bytearray(b'abcdef')
mv = memoryview(ba)
mv[1:4] = b'XYZ'
print(ba)  # bytearray(b'aXYZef')
bytearray(b'aXYZef')

Frozenset как ключ словаря

Пример
params = frozenset(['width', 'height'])
cfg = {params: [1920, 1080]}
print(cfg)  # {frozenset({'width', 'height'}): [1920, 1080]}
{frozenset({'width', 'height'}): [1920, 1080]}

Range с отрицательным шагом

Пример
r = range(10, 0, -2)
print(list(r))  # [10, 8, 6, 4, 2]
print(5 in r)  # False (5 не входит)
[10, 8, 6, 4, 2]
False

Dict.fromkeys для создания словаря

Пример
keys = ['a', 'b', 'c']
d = dict.fromkeys(keys, 0)
print(d)  # {'a': 0, 'b': 0, 'c': 0}
{'a': 0, 'b': 0, 'c': 0}

Вложенные списки и поверхностное копирование

Пример
mat = [[0]*3 for _ in range(3)]
mat[0][0] = 1
print(mat)  # [[1,0,0],[0,0,0],[0,0,0]]
# Ошибка: если использовать [[0]*3]*3, строки будут копироваться, и изменение одной повлияет на все
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

Встроенные типы Python - comments

En
встроенные типы python (python)