На стороне реализации С в структуру данных словаря добавлена приватная переменная
ma_version_tag, которая изменяется всякий раз при изменении словаря.clear()Если вызван один из этих методов, то версия изменяется. Версия это не хеш и не ID. Каждый словарь имеет свою уникальную версию, даже два одинаковых или два пустых словаря.
pop(key)
popitem()
setdefault(key, value)
__delitem__(key)
__setitem__(key, value)
update(...)
Как посмотреть версию? Из самого словаря не получится. Есть код в тестах для получения свойства
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