“In-place” is a very precise term that refers to what happens in memory when the operation is performed.
In simple terms, you can think that the original value in memory is getting directly modified when it’s in-place.
What would it be like if it’s not in-place?
In python, += for strings is not in-place (tricky python). This is really because python strings are immutable (meaning they cannot be changed). So why does it work? Because under the hood, a copy of a string is made for the operation to happen.
>>> s = "a string"
>>> id(s)
1952354635888
>>> s += " is immutable"
>>> id(s)
1952354513456
>>>
Note the different IDs, which tells us the values do not have the same memory address. The first address is garbage collected having lost its reference.
>>> a = 1089
>>> id(a)
1952353216592
>>> a += 73
>>> id(a)
1952353216880
>>> a *= 1
>>> id(a)
1952353216656
>>>
This tells us that in-place does not actually refer to the same memory address, only re-use of the variable with its present value computed into the assignment.
Bottom line, Python looks after memory management so we don’t have to (unlike C). It will not permit two exact same values to exist in memory at the same time, but will point all references to the same address. None of this important for us to know.