Какое знание имеет смысл сохранять
Используйте CardReplay как личную коллекцию вопросов к коду, который уже пришлось понять: почему тест не проходит, чем отличаются две операции, какое условие нарушено. На одной стороне сохраните минимальный пример или вопрос, на другой — проверенный результат и объяснение. После повторения решите новую небольшую задачу в своей среде разработки.
Такой набор отличается от перечня всех команд языка. Если ответ можно быстро найти в документации, но его незнание не мешает работе, переписывать справочник не обязательно. Начните с собственного затруднения, из-за которого вы неверно предсказали поведение программы. Удалите из примера всё, что не влияет на вопрос.
От ошибки к минимальному примеру
- Запишите, чего ожидали и что произошло на самом деле.
- Сократите код до фрагмента, который воспроизводит различие.
- Укажите язык, существенную версию и исходные данные.
- Сформулируйте вопрос до запуска: что изменится, что вернётся, где возникнет ошибка?
- Выполните код и сверьте объяснение с документацией.
Оставьте рядом ссылку на нужный раздел. В зависимости от задачи это может быть описание метода, контракт API или собственный разрешённый тест. После обновления зависимости вернитесь к карточкам, поведение которых могло измениться. Не считайте ответ вечным только потому, что он однажды оказался верным.
Три примера на списках Python
Ниже используются обычные списки Python 3. Семантика операций описана в официальной документации Python 3.14. Перед ответом предскажите результат; затем запустите каждый фрагмент отдельно, с исходными данными из вопроса.
1. Один элемент или элементы списка
a = [1]
a.append([2, 3])
print(a)
b = [1]
b.extend([2, 3])
print(b)Ответ. [1, [2, 3]] и [1, 2, 3]: append добавляет один объект, extend — элементы переданного iterable.
Запишите, какая операция соответствовала вашей исходной задаче. Совпадение названий с бытовым «добавить список» ещё не определяет нужное поведение.
2. Два имени одного списка
a = [1]
b = a
b.append(9)
print(a)Ответ. [1, 9]: a и b ссылаются на один список.
На обороте оставьте объяснение изменения, а не только вывод. Затем придумайте пример, в котором такая общая ссылка была бы намеренной.
3. Копия внешнего списка
a = [1]
b = a.copy()
b.append(9)
print(a, b)Ответ. [1] [1, 9]. Создана поверхностная копия; внешние списки разные.
Поверхностная копия не означает независимость всех вложенных изменяемых объектов. Такой случай требует отдельного вопроса и отдельной проверки.
Вернуться от ответа к программированию
После трёх карточек напишите маленькую функцию, которая получает список и возвращает новый список с дополнительным элементом, сохраняя входной без изменений. Проверьте это утверждением или тестом. Потом измените требование: функция должна изменять переданный список. Объясните, почему реализация теперь может отличаться.
Если результат карточки вспоминается, а функция не получается, разберите процесс написания и проверки кода. Повторение готового вывода не заменяет декомпозицию, отладку и проектирование. Проверяйте применение на новом условии, а не только на тех же числах из вопроса.
Для собеседования карточка может помочь восстановить понятие и его ограничения. Но развёрнутое объяснение, обсуждение компромиссов и решение задачи нужно отдельно проговорить или написать. Подборка терминов сама по себе не подтверждает профессиональную готовность.
Как оформить технический набор в CardReplay
Создайте набор с конкретным названием, например «Python — изменение списков». Добавьте три вопроса с короткими фрагментами и проверенными ответами. Сохраняйте отступы и существенные входные данные. При длинном коде лучше выделить меньший пример и дать ссылку на разрешённый исходный материал.
CardReplay не выполняет Python или другой код, не сравнивает вывод с эталоном и не подключается к вашему репозиторию в описываемом сценарии. Запуск и тестирование выполняются в вашей среде. На карточке хранится вопрос, объяснение и контекст, достаточный для самостоятельной проверки.
Откройте сохранённый набор, ответьте до переворота и проверьте результат отдельно. Если подготовленные текстовые пары уже есть, можно воспользоваться импортом списка. Проверьте разделители на небольшом образце: знаки внутри кода не должны случайно разрезать вопрос.
Как поддерживать коллекцию в рабочем состоянии
Разделяйте темы по смыслу: поведение коллекций, ошибки работы с данными, контракты конкретной библиотеки. Не соединяйте в одном вопросе синтаксис языка, настройку окружения и архитектурный выбор. Один короткий правильный ответ не всегда подходит задаче с несколькими допустимыми решениями.
Когда меняется версия инструмента, помечайте затронутые вопросы понятным контекстом и пересматривайте источник. Устаревшую карточку лучше исправить или убрать из текущего набора, чем продолжать повторять. Не переносите в открытые материалы рабочие токены, реальные клиентские данные и закрытый код компании.
Можно включить повторение по расписанию для уже проверенных вопросов. Оно организует возвращение к материалу, но не следит за релизами зависимостей и не подтверждает актуальность ответа.
С чего начать без большого архива
Выберите одну недавнюю ошибку, подготовьте минимальный пример и два соседних вопроса. Проверьте каждый запуском, сохраните набор и после первого занятия решите изменённую задачу. Если вопросы не помогают понимать своё решение, перепишите их до пополнения коллекции.
Создание собственных наборов и папок, текстовый импорт и озвучка доступны бесплатно. Изображения, список и изучение частями относятся к Pro; условия уточняются на странице тарифов. Один набор содержит от 3 до 120 заполненных карточек.
В гайде об активном вспоминании разобран общий принцип проверки до просмотра ответа. Здесь его рабочий результат — объяснить собственную ошибку и изменить код осмысленно. Этот результат важнее размера коллекции сохранённых фрагментов.