*All* types are passed by reference unless explicitly copied. Python does
make special cases for simple and complex types.
That is technically true; but, you will not have this issue with simple
singlular data types. Technically the difference as to whether you will
have this problem depends on whether or not an object is mutable.
Simple objects (numbers and strings) are all immutable. Since this issue
revolves around changing objects in place, it cannot arise with immutable
objects. I am not always conscous of whether I am working with objects
that are mutable or immutable; but, I am generally concious of the general
complexity of the object. Whenever I am working with objects that are
complex, I am reminded to watch out for mutability issues. So, while it is not
totally correct to think of it this way, I find it an easier guideline to
follow.