Python variables are duck typed, mutable and it's functions can be written to have side effects. (In other words, it has a lot of non-functional programming features.)
However, it also has first-class functions and yet it's not a functional programming language. So I guess it must be true that a programming language can have functional aspects (or aspects of another language paradigm) even if it does not fall into that paradigm. What exactly makes Python not a functional programming language? Is it a test of whether it has a single characteristic or more of a test of multiple things? (If the former, what is the single aspect that makes Python non-functional or the single aspect that makes Haskell functional?)