📖 Теория

⚡ Кратко

Summary session 8 объединяет уроки про память списков и list comprehension.

Главная идея первой части: переменная ссылается на объект, а присваивание не копирует изменяемый объект.

Для вложенных списков поверхностной копии часто недостаточно.

del удаляет элементы, срезы и имена; при удалении из списка важно не ломать индексы.

List comprehension хорош для простого преобразования и фильтра.

zip() нужен для параллельного обхода последовательностей.

Стек работает через append()/pop(), очередь — через deque.append()/popleft().

В summary есть практические задания на удаление после нуля, zip и произведения пар.

original_list = [1, 2, 3]
copied_list = original_list
copied_list[0] = 0
print(original_list)

Топ-3 ошибки: путать ссылку и копию; ожидать порядок там, где его нет; усложнять выражение, когда обычный цикл читается лучше.

Блок 1: память и изменяемость

Источник начинает summary с экспресс-опроса: что такое изменяемые типы, куча, id() и как работает присваивание.

Ключевой критерий: если объект изменяемый и у двух имён один id(), изменение через одно имя видно через другое.

original_list = [1, 2, 3]
copied_list = original_list
copied_list[0] = 0
print(original_list)

Блок 2: вложенные списки и del

Вложенные списки читаются и изменяются через несколько индексов. del numbers[1][0] удаляет элемент из внутреннего списка, а не всю строку.

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

numbers = [1, 2, 0, 3, 4, 5]
if 0 in numbers:
    zero_index = numbers.index(0)
    del numbers[zero_index:]
print("Список после удаления:", numbers)

Блок 3: comprehension, zip и структуры доступа

Вторая часть summary повторяет компактное создание списков, координаты через вложенные циклы, zip() и стек.

Если выражение в comprehension становится длинным, summary — хороший момент переписать его в обычный цикл и проверить логику.

coordinates = [(x, y) for x in range(1, 3) for y in range(2)]
print(coordinates)

names = ["John", "Jane", "Doe"]
ages = [30, 25, 40, 50]
print(list(zip(names, ages)))
Проверить по документации: Современные уточнения в этом разделе сверяйте с актуальной документацией Python 3.x, особенно если используете поведение памяти или производительности как часть архитектурного решения.