Блок 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)))