mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
Issue 9865: add __sizeof__ to OrderedDict.
This commit is contained in:
parent
234f88dc73
commit
35c87f2b8e
3 changed files with 28 additions and 11 deletions
|
|
@ -97,17 +97,6 @@ class OrderedDict(dict, MutableMapping):
|
|||
yield curr.key
|
||||
curr = curr.prev
|
||||
|
||||
def __reduce__(self):
|
||||
'Return state information for pickling'
|
||||
items = [[k, self[k]] for k in self]
|
||||
tmp = self.__map, self.__root, self.__hardroot
|
||||
del self.__map, self.__root, self.__hardroot
|
||||
inst_dict = vars(self).copy()
|
||||
self.__map, self.__root, self.__hardroot = tmp
|
||||
if inst_dict:
|
||||
return (self.__class__, (items,), inst_dict)
|
||||
return self.__class__, (items,)
|
||||
|
||||
def clear(self):
|
||||
'od.clear() -> None. Remove all items from od.'
|
||||
root = self.__root
|
||||
|
|
@ -162,6 +151,26 @@ class OrderedDict(dict, MutableMapping):
|
|||
link.next = first
|
||||
root.next = first.prev = link
|
||||
|
||||
def __reduce__(self):
|
||||
'Return state information for pickling'
|
||||
items = [[k, self[k]] for k in self]
|
||||
tmp = self.__map, self.__root, self.__hardroot
|
||||
del self.__map, self.__root, self.__hardroot
|
||||
inst_dict = vars(self).copy()
|
||||
self.__map, self.__root, self.__hardroot = tmp
|
||||
if inst_dict:
|
||||
return (self.__class__, (items,), inst_dict)
|
||||
return self.__class__, (items,)
|
||||
|
||||
def __sizeof__(self):
|
||||
sizeof = _sys.getsizeof
|
||||
n = len(self) + 1 # number of links including root
|
||||
size = sizeof(self.__dict__) # instance dictionary
|
||||
size += sizeof(self.__map) * 2 # internal dict and inherited dict
|
||||
size += sizeof(self.__hardroot) * n # link objects
|
||||
size += sizeof(self.__root) * n # proxy objects
|
||||
return size
|
||||
|
||||
setdefault = MutableMapping.setdefault
|
||||
update = MutableMapping.update
|
||||
pop = MutableMapping.pop
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue