The reason they do this is if you were to pass an array to a function, it's faster to pass by reference than to duplicate the array.

But this is simply how Python is by design. It's a dynamically typed language, so everything is a reference to an object. Even primitive types like int, float, and string are objects. Even the types themselves are objects, which means you can do this:
arr = [int, float, str]