When your values are immutable you are often forced to use a declarative style. This means you express what a value is, rather than imperatively building it up.
For example:
results = []
for x in values:
results.append(func(x))
This common style of imperative code may seem simple at first, but when you read it, you as the reader must mentally construct a state machine and step by step reason about the state of mutation on each line.