Какие основные типы данных в Python и как они классифицируются

Ответ

В Python типы данных принято классифицировать по их изменяемости (mutability) — возможности изменить объект после его создания.

Неизменяемые (Immutable) типы

Значения этих объектов нельзя изменить после их создания. Любая операция, которая выглядит как изменение, на самом деле создает новый объект.

  • Числовые типы:
    • int — целые числа (e.g., 10, -5).
    • float — числа с плавающей точкой (e.g., 3.14).
    • complex — комплексные числа (e.g., 1+2j).
  • Последовательности:
    • str — строки (e.g., 'hello').
    • tuple — кортежи, неизменяемые списки (e.g., (1, 'a', True)).
    • bytes — последовательности байт.
  • Логический тип:
    • bool — булевы значения (True, False).
  • Множества:
    • frozenset — неизменяемая версия множества.
  • Специальный тип:
    • NoneType — имеет единственное значение None.

Изменяемые (Mutable) типы

Эти объекты можно изменять «на месте» (in-place) после их создания, не создавая новый объект.

  • Последовательности:
    • list — списки, упорядоченные изменяемые коллекции (e.g., [1, 'a', 3.14]).
  • Словари:
    • dict — словари, коллекции пар «ключ-значение» (e.g., {'key': 'value'}).
  • Множества:
    • set — неупорядоченные коллекции уникальных элементов (e.g., {1, 2, 3}).

Пример различия:

# Изменяемый тип (list)
my_list = [1, 2, 3]
my_list.append(4) # Объект my_list изменился
print(my_list)    # Вывод: [1, 2, 3, 4]

# Неизменяемый тип (str)
my_string = "hello"
# my_string[0] = 'H' # Это вызовет TypeError
new_string = my_string.capitalize() # Создается новый объект
print(my_string)    # Вывод: 'hello'
print(new_string) # Вывод: 'Hello'

Ответ 18+ 🔞

А, вот это тема, блядь! Типы данных в Python, да? Ну, тут всё просто, как три копейки, если не вникать, а как вникнешь — хуй с горы, ёпта. Смотри, вся суть в том, можно ли объект поменять после того, как его создали, или нет. Это называется изменяемость, или, по-умному, mutability.

Неизменяемые, то есть Immutable, ёбушки-воробушки

Этих, сука, после создания не переделаешь. Что создал, то и имеешь. Любая попытка их изменить — это пиздопроебибна, на самом деле создаётся новый объект, а старый остаётся как был.

  • Циферки всякие:
    • int — целые числа, ну, типа 10, -5. Проще говоря, счётчики.
    • float — числа с запятой плавающей, 3.14 там всякое.
    • complex — комплексные, 1+2j. Это уже для извращенцев, которые в математике шариют.
  • Последовательности, которые застыли, как говно в проруби:
    • str — строки, 'hello'. Попробуй букву поменять — получишь TypeError в ебало.
    • tuple — кортежи, типа (1, 'a', True). Заперли намертво, блядь.
    • bytes — байты. Тоже несгибаемые.
  • Логический тип:
    • boolTrue и False. Ну тут уж либо да, либо нет, промежуточного хуйняка не дано.
  • Множества особые:
    • frozenset — множество, но в бронежилете. Неизменяемое, бля.
  • Тип для пофигистов:
    • NoneType — это просто None. Ничего, пустота, вакуум.

Изменяемые, то есть Mutable, хитрая жопа

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

  • Последовательности гибкие:
    • list — списки, [1, 'a', 3.14]. Туда-сюда, добавляй, удаляй — полный карнавал.
  • Словари:
    • dict{'key': 'value'}. Ключи-значения, как в борделе — всё можно переставить.
  • Множества обычные:
    • set{1, 2, 3}. Неупорядоченная куча уникального барахла, но менять можно.

Смотри, как это работает, на примере, а то нихуя не понятно:

# Изменяемый тип (list) — живём, ебёмся, меняемся
my_list = [1, 2, 3]
my_list.append(4) # Подъебали список прямо на месте, добавили четвёрку
print(my_list)    # Смотри, сука: [1, 2, 3, 4] — тот же самый объект, но уже с довеском!

# Неизменяемый тип (str) — святой, неприкасаемый
my_string = "hello"
# my_string[0] = 'H' # Если раскомментировать — получишь пизды от интерпретатора, TypeError!
new_string = my_string.capitalize() # Здесь не меняем, а создаём НОВУЮ строку, старую не трогаем
print(my_string)    # Вывод: 'hello' — старая как была, чиста, непорочна
print(new_string) # Вывод: 'Hello' — а это уже её улучшенная копия, новая тёлка

Вот и вся магия, блядь. Запомни: mutable — меняй, не бойся; immutable — не трожь, создавай новое. А перепутаешь — будешь потом дебажить, волнение ебать, терпения ноль ебать.