TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.9K subscribers
Post #4936 119
Как меняется буфер

1️⃣В data лежат байты AB. Вызов memoryview(data) создаёт представление того же буфера, не копию данных.

2️⃣Присваивание data[0] = ord("Z") заменяет первый байт без изменения размера. Представление видит эту запись, поэтому первый print выводит b'ZB'.

3️⃣Вызов append пытается увеличить bytearray. Пока view активно, изменение размера запрещено: возникает BufferError, обработчик печатает blocked. Байт C не добавляется.

4️⃣Вызов view.release() освобождает представление. Теперь ограничение на изменение размера, связанное с этим view, снято. Сам bytearray при этом остаётся.

5️⃣Второй append успешно добавляет C. Последний print выводит b'ZBC'. Все три строки: b'ZB', blocked, b'ZBC'.

Почему это важно
Представления помогают обрабатывать бинарные пакеты без копирования. Пока такое представление активно, можно заменять байты внутри буфера, но нельзя расширять bytearray. Перед расширением нужно освободить все активные представления этого буфера.
More from @quiz_python
  1. Oct 17, 2026Post #4935
  2. Oct 16, 2026Разбор по шагам 1️⃣Базовый адрес https://example.com/api/ содержит схему https, хост examp…
  3. Oct 16, 2026Post #4933
  4. Oct 15, 2026Порядок вывода 1️⃣В ids два идентификатора: a и b. В states только один статус: ok. Вызов…
  5. Oct 15, 2026Post #4931
  6. Oct 14, 2026Post #4930
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →