I would categorize it as a subset of dynamic typing, and that's what Wikipedia says too.
Dynamic typing means that types can be changed arbitrarily at runtime, compared to statically typed languages which define all types at compile time.
Strong/weak means that type coercions rarely/never happen automatically. For instance JS has some interesting behavior enabled by weak typing `[] + [] -> ""`. Whereas Python rarely coerces things for you. The division operator in Python 2 was strongly typed, while they changed it to weak typing in Python 3 (inline with the practicality vs. purity convention).
In Python everything has a type, and you can't use a float as a list, for instance. It's correct to call it both strongly typed and dynamic, those are not antonyms.