К обсуждениям

Python 3.15 RC1: frozendict или MappingProxyType — проверка границы

Редакция VOne Технологии

Практическая проверка Python 3.15 RC1: как отличить frozendict Python 3.15 от MappingProxyType и проверить реальную неизменяемость конфигурации. Изолированный fixture, отрицательный контроль, заранее заданный критерий и безопасный пакет диагностики.

Неизменяемый объект и read-only view

PEP 814 добавляет встроенный frozendict как самостоятельное неизменяемое отображение; это не динамический read-only view поверх изменяемого dict. Это подтверждает только границу функции, а не наличие проблемы в конкретном проекте. Практический симптом уже: Код называет конфигурацию неизменяемой, хотя MappingProxyType продолжает отражать изменения исходного словаря, а вложенный list остаётся изменяемым даже внутри frozendict. До изменения кода зафиксируйте версию runtime, способ установки, один ожидаемый результат и один отрицательный исход. RC1 остаётся предварительным выпуском: его проверяют в отдельной среде, не ставят поверх рабочего interpreter и не используют один удачный запуск как разрешение на migration.

Fixture с изменяемым источником

Рекомендуемый fixture: создать исходный dict с простым значением и вложенным списком, построить MappingProxyType и frozendict, после чего изменить исходный dict и отдельно попытаться изменить верхний и вложенный уровни. Дайте ему метку T23-02, отдельный temp root и короткий deadline. Входы должны быть синтетическими, повторяемыми и минимальными; каждый новый запуск получает новые объекты и процесс, если cache или global state способны изменить наблюдение. До опыта запишите точную команду и ожидаемый class результата. Не включайте рабочие конфиги, адреса, токены, персональные строки, production PID или полные environment dumps.

Проверка верхнего и вложенного уровней

Опровергающий маршрут: сравнить обычный dict, proxy и новый frozendict на чтении, присваивании, изменении источника, hash() и копировании; вложенный список проверять отдельной строкой, не выдавая shallow immutability за deep. Собирайте строки формата «контейнер | видит изменение источника | принимает присваивание | hash доступен | вложенное значение изменяется | результат сравнения». Порядок control A, target B, fresh control A2 обнаруживает загрязнение fixture: если A2 расходится с A, итог нельзя помечать passed. Пустое поле не равно нулю, отсутствие exception не доказывает правильную семантику, а изменение двух параметров сразу лишает опыт диагностической силы. Соседние причины получают отдельные строки, а не удобное общее объяснение.

Матрица выбора контейнера

Зелёный критерий сформулирован заранее: frozendict не меняется вслед за источником и не принимает запись верхнего уровня, а отчёт явно помечает вложенные mutable-объекты как отдельную ответственность. Ветка not reproduced означает только отсутствие симптома в этой версии fixture; blocked означает нехватку capability или источника; failed control возвращает расследование к стенду. Стоп-линия: {item['stop']}. Нельзя добиваться зелёного результата отключением проверки, broad except, ростом лимита, повторением до случайного успеха или подменой предварительного release стабильным обещанием. После теста удаляются только созданные temp-ресурсы.

Что передать при несовместимости

Для maintainer или поддержки подготовьте: минимальный литерал без рабочих настроек, repr трёх контейнеров, типы вложенных значений, исключения присваивания и версия RC без токенов и конфигов. Добавьте label T23-02, московский timestamp, точную версию RC и формулировку критерия «frozendict не меняется вслед за источником и не принимает запись верхнего уровня, а отчёт явно помечает вложенные mutable-объекты как отдельную ответственность». Секреты, IP, hostnames, usernames, абсолютные домашние пути и полные логи удалите. Официальные источники подтверждают изменение «PEP 814 добавляет встроенный frozendict как самостоятельное неизменяемое отображение; это не динамический read-only view поверх изменяемого dict.», но не подтверждают результат вашего теста, частоту проблемы или необходимость менять production. Такой пакет позволяет воспроизвести одну ветку, не раскрывая данные и не смешивая её с соседними issues.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.