Вопрос6
Осталось:

Что такое изменяемые и неизменяемые типы данных?

Образцовый ответ

Показывать ответ по умолчанию

В Python все объекты делятся на изменяемые и неизменяемые в зависимости от того, можно ли менять их содержимое после создания.

Неизменяемые:

  • int, float, bool
  • str
  • tuple
  • frozenset

При «изменении» создаётся новый объект:

x = 10
print(id(x))  # Например: 140234866357520
x += 1
print(id(x))  # Другой id — это новый объект

Изменяемые:

  • list
  • dict
  • set

Объект изменяется «на месте»:

lst = [1, 2, 3]
print(id(lst))  # Например: 140234866400064
lst.append(4)
print(id(lst))  # Тот же id — объект изменился

Почему это важно:

  • Ключи словаря могут быть только неизменяемыми объектами.
  • Передача в функции: изменяемые объекты могут быть изменены внутри функции, что может привести к неожиданным побочным эффектам.
  • Значения по умолчанию: не стоит использовать изменяемые объекты как значения по умолчанию в функциях.
# Распространённая ошибка
def add_item(item, lst=[]):  # Один список на все вызовы!
    lst.append(item)
    return lst

# Правильный подход
def add_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst