-
Notifications
You must be signed in to change notification settings - Fork 1
/
frozendict.py
37 lines (30 loc) · 987 Bytes
/
frozendict.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class FrozenDict(dict):
"""
A FrozenDict is an immutable dictionary.
"""
def __init__(self, *args, **kwargs):
dict.__init__(self, *args, **kwargs)
self.__hash = None
self.__init__ = None
__delitem__ = None
__setitem__ = None
clear = None
def copy(self):
return type(self)(dict.copy(self))
pop = None
popitem = None
setdefault = None
update = None
def __hash__(self):
if self.__hash is None:
self.__hash = hash(tuple([(key, self[key]) for key in sorted(self.keys())]))
return self.__hash
def __repr__(self):
return '%s(%s)' % (type(self).__name__, dict.__repr__(self))
@classmethod
def fromkeys(S, v=None):
"""
FrozenDict.fromkeys(S[,v]) -> New FrozenDict with keys from S and values equal to v.
v defaults to None.
"""
return FrozenDict(dict.fromkeys(S, v))