this post was submitted on 12 Feb 2025
42 points (92.0% liked)
Programming
18169 readers
396 users here now
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Well, but then you're basically just pushing the mutability onto the container, since you need to be able to replace elements within it.
It's a good strategy at times though. Like say you're working in a language where strings are immutable and you want a string you can change. You can wrap it in a list along the lines
s=['foo']
and pass references to the list around instead. Then if you gos[0]='bar'
at some point, all the references will now see['bar']
instead.That's the point, when programming with immutable structures you always pass the mutability onto the enclosing structure.
A list is an antipattern here IMO. Just wrap it in some dedicated object (see e.g. Java's
StringBuilder
).I guess the point I was trying to make here was if the data type is already mutable, there is no point in sticking it in a list just so you can replace a reference with an identifier. You're just adding an extra level of indirection. But sure yeah, if the type is inherently immutable, you have to do something.
Interesting. I'm not aware of anything like
StringBuilder
in the standard library for either Python or JavaScript. Looks like it wraps a list of characters and tries to behave as string-like as possible? You could presumably write your own class like that or download an implementation from someplace.I guess in most cases in my own code, where I need a mutable string is usually as part of a larger data structure which is the thing that gets passed around by reference, so it's easy enough to replace a field within that.
For building up a string, I would tend to use an
io.StringIO
in Python with file-writing calls, but those aren't meant for sharing. What you don't want to do is use the+=
operator a lot on strings. That gets expensive unless strings are mutable (like they are in say C++'sstd::string
).