我正在寻找一种简单的方法来自动删除重复的不可变类型以节省内存(通过引用使用相同的对象)。
例如:code 1
和code 2
执行相同的工作,但code 1
使用大约200 Mb,而code 2
只执行大约6 Mb。
有什么解决方案吗?内存管理员还是别的什么?
代码1(约200 Mb):
a = []
for _ in range(100000):
a.append('my immutable data' * 100)
代码2(约6 Mb):
a = []
my_string = 'my immutable data' * 100
for _ in range(100000):
a.append(my_string)
我可以使用sys.intern()
作为字符串。但我也对其他不可变类型感兴趣,如tuple
。
解决方案之一:
class InternElements:
def __init__(self):
self.__elements_dict = {}
def intern(self, element: Any):
try:
return self.__elements_dict[element]
except KeyError:
self.__elements_dict[element] = element
return element
def extend(self, elements: Iterable[Any]):
for element in elements:
self.intern(element)