In three popular platforms I'm familar with(.NET, java, python) strings are immutable but lists are by default mutable.
In all languages there is some functional support(linq, streams, list comprehensions) so it is easy to transform/filter a list to a different list.
Strings and lists are quite similar in that both are wrappers of a array and indeed it is quite common in the wild to see code bases where most lists are used in a immutable way once they have been constructed with e.g linq.
I understand that in all three language the functional support was not have been there in version 1.0 but the fact remains that in neither language there is not a simple first-class supported class that offers the guarantee of immutability that string does. In e.g .NET there is a nuget package to install this functionality which seems to me at least to be almost as useful as string.
I don't think most programmers would dream of creating a substring of a string using anything other than the built-in substring method. What is the reason we are still defaulting to mutable collections when functional apis are available that can easily construct immutable collections?