Ответ
Основное отличие — изменяемость (mutability), что влечёт за собой различия в использовании и производительности.
| Характеристика | Список (list) |
Кортеж (tuple) |
|---|---|---|
| Изменяемость | Изменяемый (mutable). Элементы можно изменять, добавлять, удалять. | Неизменяемый (immutable). После создания элементы изменить нельзя. |
| Синтаксис | Квадратные скобки: [1, 2, 3] |
Круглые скобки (часто опциональны): (1, 2, 3) или 1, 2, 3 |
| Производительность | Медленнее при итерации, занимает больше памяти из-за накладных расходов на изменение. | Быстрее, занимает меньше памяти, так как структура фиксирована. |
| Использование | Для коллекций, которые могут меняться (динамические данные). | Для константных коллекций (ключи словаря, возврат нескольких значений из функции). |
| Хэшируемость | Не хэшируем (не может быть ключом словаря). | Хэшируем, если все его элементы хэшируемы (может быть ключом словаря). |
Примеры:
# Список — можно изменить
my_list = [1, 2, 3]
my_list[0] = 10 # OK: [10, 2, 3]
my_list.append(4) # OK: [10, 2, 3, 4]
# Кортеж — изменить нельзя
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
# Практическое применение кортежа
def get_user_info(user_id):
# Возврат нескольких значений как единой неизменяемой структуры
name = "Alice"
role = "Admin"
return (user_id, name, role) # или просто return user_id, name, role
# Использование как ключа словаря (только если элементы хэшируемы)
cache = {}
key = ("api", "v1", 123)
cache[key] = "cached_data" Ответ 18+ 🔞
А, ну вот, опять про эти списки и кортежи. Сидишь такой, пишешь код, и тут бац — надо выбрать, в чём данные хранить. А разница-то, блядь, проще некуда, но пока сам не обожжёшься, нихуя не запомнишь.
Смотри, вся суть в одной характеристике — изменяемость (mutability). От неё, как от печки, все остальные пляски идут. И производительность, и использование, и вообще всё.
| Характеристика | Список (list) |
Кортеж (tuple) |
|---|---|---|
| Изменяемость | Изменяемый (mutable). Тут можно всё: поменять элемент, добавить, удалить — полный бардак, но контролируемый. | Неизменяемый (immutable). Создал — и всё, приехали. Как отлили в граните. Попробуй изменить — получишь TypeError прямо в лицо. |
| Синтаксис | Квадратные скобки: [1, 2, 3]. Всё честно. |
Круглые скобки, но часто их можно и не ставить: (1, 2, 3) или просто 1, 2, 3. |
| Производительность | Чуть медленнее, памяти жрёт больше. Ну так и понятно — он же всегда готов к тому, что ты в него ещё чего-нибудь впендюришь, места про запас держит. | Быстрее, памяти меньше. А чему тут удивляться? Структура фиксированная, никаких сюрпризов, всё предсказуемо. |
| Использование | Для всего, что может и должно меняться. Список пользователей, лог событий, корзина в интернет-магазине — тут твой выбор. | Для вещей постоянных. Ключи в словаре, возврат нескольких значений из функции, какие-нибудь константные наборы вроде ('R', 'G', 'B'). |
| Хэшируемость | Не хэшируем, ёпта. В ключи словаря его не запихнёшь — он же может измениться, доверия к нему ноль ебать. | Хэшируем, если все элементы внутри тоже хэшируемы. А значит, может спокойно быть ключом. Надёжный пацан. |
Ну и примеры, чтобы вообще всё стало ясно, как божий день:
# Список — тут полная воля
my_list = [1, 2, 3]
my_list[0] = 10 # Без проблем: [10, 2, 3]
my_list.append(4) # Запихнули четвёрку: [10, 2, 3, 4]
# my_list — это как твой рабочий стол: вечно бардак, но ты знаешь, где что лежит.
# Кортеж — тут дисциплина
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # А вот это уже НИЗЯ. TypeError тебе в сраку. Создал — терпи.
# Где это реально пригождается? Да везде!
def get_user_info(user_id):
# Функция возвращает кучу всего разом. И чтобы это "всё" было одним неделимым куском — кортеж в руки.
name = "Alice"
role = "Admin"
return (user_id, name, role) # Скобки можно и не писать, но суть та же.
# Или вот, ключ в словаре. Только хэшируемое.
cache = {}
key = ("api", "v1", 123) # Кортеж из строк и числа — всё хэшируемо.
cache[key] = "cached_data" # Идеально. Попробуй сделать ключом список — получишь пиздюлину от интерпретатора.
Короче, если тебе нужно что-то гибкое, что будет расти, меняться и пульсировать — бери список. Если тебе нужна гарантия, что данные останутся в том виде, в котором ты их создал, и ты хочешь speed и надёжность — кортеж твой выбор. Всё просто, я тебе верю, чувак.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶