57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding:utf-8 -*-
|
|
import copy
|
|
import sys
|
|
class G():
|
|
def __init__(self):
|
|
self.data = dict()
|
|
|
|
def get(self, name):
|
|
return self.data.get(name, 0)
|
|
|
|
def getall(self):
|
|
return self.data
|
|
|
|
def set(self, name, v):
|
|
value = copy.deepcopy(v)
|
|
if name in self.data:
|
|
if isinstance(self.data[name], dict) and isinstance(value, dict):
|
|
self.data[name].update(value)
|
|
else:
|
|
self.data[name] = value
|
|
else:
|
|
self.data.setdefault(name, value)
|
|
|
|
def getsize(self):
|
|
def get_size(obj, seen=None):
|
|
size = sys.getsizeof(obj)
|
|
if seen is None:
|
|
seen = set()
|
|
obj_id = id(obj)
|
|
if obj_id in seen:
|
|
return 0
|
|
seen.add(obj_id)
|
|
if isinstance(obj, dict):
|
|
size += sum(get_size(k, seen) + get_size(v, seen) for k, v in obj.items())
|
|
elif isinstance(obj, (list, tuple, set, frozenset)):
|
|
size += sum(get_size(i, seen) for i in obj)
|
|
return size
|
|
total_bytes = get_size(self.data)
|
|
return round(total_bytes / 1024, 2)
|
|
|
|
def clear(self, name=None):
|
|
if name:
|
|
self.data.pop(name)
|
|
else:
|
|
self.data.clear()
|
|
|
|
def setobj(self, name, obj):
|
|
if name in self.data:
|
|
if isinstance(self.data[name], dict) and isinstance(obj, dict):
|
|
self.data[name].update(obj)
|
|
else:
|
|
self.data[name] = obj
|
|
else:
|
|
self.data.setdefault(name, obj)
|
|
|
|
_G = G() |