Ошибка 1. Одноэлементный кортеж без запятой
Неверно
single = (5)
print(type(single))
Это число в скобках, а не кортеж.
Верно
single = (5,)
print(type(single))
Запятая показывает Python, что это кортеж.
Ошибка 2. Попытка изменить кортеж
numbers = (10, 20, 30)
# numbers[1] = 40 # TypeError
Кортеж неизменяем. Если нужно менять элементы по индексу, используйте список. Если нужен новый фиксированный набор, создайте новый кортеж.
numbers = (10, 20, 30)
updated = numbers[:1] + (40,) + numbers[2:]
print(updated)
Ошибка 3. Добавление не кортежа
numbers = (1, 2)
# numbers = numbers + (3) # TypeError
(3) — это int. Для конкатенации нужен другой кортеж.
numbers = (1, 2)
numbers = numbers + (3,)
print(numbers)
Ошибка 4. Неверное количество переменных при распаковке
data = (1, 2, 3)
# a, b = data # ValueError: too many values to unpack
Используйте столько переменных, сколько элементов, или заберите остаток через *.
data = (1, 2, 3)
a, *rest = data
print(a)
print(rest)
Ошибка 5. index() без проверки наличия
numbers = (10, 20, 30)
# print(numbers.index(40)) # ValueError
Если элемента может не быть, сначала проверьте наличие.
numbers = (10, 20, 30)
target = 40
if target in numbers:
print(numbers.index(target))
else:
print("Значение не найдено")
Ошибка 6. Переопределение встроенных имён
numbers = (3, 7, 2)
# max = numbers[0] # так лучше не называть переменную
Имя max уже занято встроенной функцией Python. Для переменной лучше выбрать max_value.
numbers = (3, 7, 2)
max_value = numbers[0]
print(max_value)
Ошибка 7. Непонимание вложенных изменяемых объектов
Сам кортеж неизменяем, но он может хранить изменяемый объект, например список. Нельзя заменить список в кортеже, но можно изменить содержимое самого списка.
data = ([1, 2], "items")
data[0].append(3)
print(data)
Проверить по документации: это следствие модели объектов Python и различия между неизменяемостью контейнера и изменяемостью вложенного объекта.