我正在创建一个简单的unix控制台文本滚动器,而我的方法是连续地将双端队列的最大长度设置为屏幕宽度。每次我清除控制台并将新字符添加到双端队列时,我都会将双端队列的内容连接(''.join(deque))到字符串中以打印到控制台。我知道每次执行此操作都会创建一个新对象。我输入到滚动条中的文本文件很大,我想知道以这种方式不断创建字符串对象在内存方面是否不是效率很低的。我曾考虑过使用StringIO,但是每次调用getvalue()时,它也会创建一个新对象。看来无论如何我都接近它,打印到控制台会创建一个具有唯一ID的新对象。因此,我创建了一个简单的MutableString类。使用 str ()方法,我可以打印到控制台,并且该类对象似乎只有两个与之关联的ID。一个用于类对象本身,另一个用于由print()调用 str ()时创建的对象。我的问题是:这种方法实际上比我在执行时调用''.join(deque)更有效吗?我创建的简单类实际上是可变的,因此可以节省资源吗?如果不是,将字符添加到字符串的计算上便宜的方法是什么?感谢您的时间和关注!
from collections import deque
class MutableString:
def __init__(self, string):
self.string = deque(string)
def __repr__(self):
return f'mutable_string.MutableString({self.__str__()})'
def __str__(self):
return ''.join(self.string)
def __add__(self, other):
self.string.append(other)