Краткая версия:Каков наилучший способ переопределить dict.keys()
и друзей, чтобы уберечь себя от случайного изменения моего (предположительно)неизменяемого словаря в Python 3?
В недавнем вопросе я спросил о хешировании неизменяемого словаря в Python . С тех пор я создал неизменяемый, хешируемый словарь, которым я доволен. Однако я понял, что в нем есть дыра:представления словаря , возвращаемые keys()
, items()
и values()
, по-прежнему позволяют мне случайно изменять мой (предположительно)неизменяемый словарь.
Единственный вопрос о переполнении стека, который я смог найти о представлениях словаря, был Python создает собственное представление словаря подмножества словаря , но это, похоже, не имело большого отношения к моей проблеме, и ответы to Что такое «замороженный диктат»? кажется, что я не вникал в переопределение keys()
и т.д.
Не предотвратит ли я что-то подобное случайное изменение, например, ключей моего неизменяемого словаря?
class FrozenCounter(collections.Counter):
"Model an hashable multiset as an immutable dictionary."
#...
def keys(self):
return list(super().keys())
def values(self):
return list(super().values())
def items(self):
return list(super().items())
Читать в основном не умею.
dictviews не могут изменять dicts. В документации Python 3 я неправильно прочитал: «Они обеспечивают динамическое представление записей словаря, что означает, что при изменении словаря представление отражает эти изменения», как говорится: «при изменении представления словарь отражает эти изменения». Очевидно, это не то, что сказано в документации.