On Tue, Mar 31, 2020 at 4:20 AM Joao S. O. Bueno <jsbu...@python.org.br> wrote: > > Hi Andrew - > > I made my previous post before reading your first answer. > > So, anyway, what we have is that for a "mutable string like object" one > is free to build his wrapper - StringIO based or not - put it on pypi, and > remember > calling `str()` on it before having it leave your code. > > Thank you for the lengthy reply anyway. > > That said, anyone could tell about small, efficient, > well maintained "mutable string" classes on Pypi? >
There's a vast difference between "mutable string" and "string builder". The OP was talking about this kind of thing: buf = "" for i in range(50000): buf += "foo" print(buf) And then suggested using a StringIO for that purpose. But if you're going to change your API, just use a list: buf = [] for i in range(50000): buf.append("foo") buf = "".join(buf) print(buf) So if you really want a drop-in replacement, don't build it around StringIO, build it around list. class StringBuilder: def __init__(self): self.data = [] def __iadd__(self, s): self.data.append(s) def __str__(self): return "".join(self.data) This is going to outperform anything based on StringIO fairly easily, plus it's way WAY simpler. But this is *not* a mutable string. It's a string builder. If you want a mutable string, first figure out exactly what mutations you need, and what performance you are willing to accept. ChrisA _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/X5OQOV3FKEXVVXRHHWTMNQY5OLYSOFKA/ Code of Conduct: http://python.org/psf/codeofconduct/