Развёрнутое пояснение:
1. Создаётся deque с maxlen=3: это кольцевой буфер, который хранит не более трёх элементов.
2. Цикл добавляет строки от 'a' до 'e'. Первые три ('a', 'b', 'c') помещаются полностью.
3. При добавлении 'd' буфер переполнен, и самый старый элемент слева ('a') автоматически вытесняется: остаётся ['b', 'c', 'd'].
4. При добавлении 'e' аналогично вытесняется 'b': буфер равен ['c', 'd', 'e'].
5. appendleft('f') вставляет элемент слева. Вытеснение всегда происходит с противоположного от вставки конца, поэтому удаляется самый правый элемент 'e'.
6. Итоговый буфер: ['f', 'c', 'd'], его и печатает print(list(recent)).
Почему это важно: deque с maxlen — стандартный способ хранить последние N записей без ручной обрезки: буфер свежих строк лога, история последних запросов, скользящее окно метрик. Ошибка в понимании того, с какого конца вытесняются элементы, приводит к тому, что в алертах и отладке теряются именно те записи, которые нужны: например, appendleft удобен для «самое свежее слева», но молча выбрасывает элементы справа, и если код дальше читает буфер с другого конца, данные «исчезают» без какого-либо исключения.
Post #4811
326
Python: задачки и вопросы
- ✍ 2