>>> a = "foo"
>>> a / 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'
This isn't a compile error. >>> a = "foo"
>>> id(a)
140105790230896
>>> a = "foo"
>>> id(a)
140105790230896
>>> a = "bar"
>>> id(a)
140105790230512
>>> a = 1
>>> id(a)
140105793782000
>>> a = "foo"
>>> id(a)
140105790230512
As for strong/weak, I think it's a bit more fluid because I can't seem to find a set definition that everyone agrees on. Some people consider weak typing to be when the language implicitly casts or converts types for you, which Python does not do: >>> a = "1"
>>> a / 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'
>>> type(a)
<class 'str'>
Except sometimes it kind of does? The divide operator converts int into float "implicitly" even when both inputs are int. So type conversion is happening behind the scenes (I don't know if you would class this as "implicit" type conversion, maybe it depends on where it happens?): >>> a = 10
>>> type(a)
<class 'int'>
>>> b = 1
>>> type(b)
<class 'int'>
>>> type(a/b)
<class 'float'>
It's really not, the human brain is _really_ good at abstracting.
In pretty much exactly the same way you don't have to pay attention to balancing to walk, your brain learns to do the same thing for cycling and driving. It abstracts the mechanics of the car (e.g. turning the wheel to turn left/right) and sort of extends its view of your "body" to the car.
This isn't an instantaneous process of course, it takes time to build up that abstraction, but it absolutely exists. If your brain wasn't good at doing those types of abstractions then walking/running/typing/speaking/breathing/etc. would take a phenomenal amount of attention and practice.