It is a "strongly dynamically typed" language

If you look how u make "C" extensions in python then this all makes sense.
Nutshell view (not accurate just for illustration).
Every data type in python inherites from a "C" structure.
which is like this
struct pythonObject :
type -> type of the object
data -> what object contains.
you then can make ur own data types, add functions etc.
So python has a string type that inherits off pythonObject.
when u do operations if datatypes do not match or can not be converted an exception occurs.
(little more complex then that but u get the idea

)
In contrast TCL is a weakly typed language. All data types are a string which are converted to the appropriate type depending on the operation. There is advantages to this when passing data back and forth from C, it is just a string.