Содржина на објавата
В PEP509 описано добавление в структуру данных словаря приватного поля с версией. Что это за версия? Она нужна для ускорения проверки изменений в словаре. Разные механизмы должны следить за целостностью данных (например неймспейса, который суть словарь). Чтобы каждый раз не проверять изменился ли словарь, мы просто можем проверить его версию. На стороне реализации С в структуру данных словаря добавлена приватная переменная ma_version_tag, которая изменяется всякий раз при изменении словаря. clear() pop(key) popitem() setdefault(key, value) __delitem__(key) __setitem__(key, value) update(...) Если вызван один из этих методов, то версия изменяется. Версия это не хеш и не ID. Каждый словарь имеет свою уникальную версию, даже два одинаковых или два пустых словаря. Как посмотреть версию? Из самого словаря не получится. Есть код в тестах для получения свойства ma_version_tag, используется для прогонки тестов. Чтобы попробовать этот код достаточно повторить то что написано в тестах. Для Windows следует добавить директорию Lib\test в PYTHONPATH. >>> import _testcapi >>> d1 = {} >>> d2 = {} >>> _testcapi.dict_get_version(d1) 12083 >>> _testcapi.dict_get_version(d2) 12099 Интересно то, что версия изменится даже если данные будут одинаковыми. Главное сам факт изменения. >>> d = {1:2} >>> _testcapi.dict_get_version(d) 12200 >>> d[1] = 2 >>> _testcapi.dict_get_version(d) 12239 Таким образом мы можем узнать а не пытался ли кто-то что-либо сделать с нашим словариком? Жаль только нет стандартного способа получения версии (или я не нашел?). Я думаю применение нашлось бы) #pep#tricks