>>1
Dynamic typing, functionally superior to static typing, doesn't require you to deal with data types much/at all. For example, there are no complex rules on what can you pass or do. Everything is evaluated in real time. x.Hi() is valid everywhere. Then in real time, the system will look for an object x (which, depending on the implementation, should be defined in the current or an outer scope, or it may not even need to exist!), and then depending of its class, it'll call the method Hi, whatever that means. You don't need to subclass anything at all.
The point of subclassing X is to implement "X-with-stuff". Instead of copypasta, try defining a hierarchy of classes where a base class holds the code you'd otherwise have to copypasta. You can also extend existing classes, so if you don't like the list class because you'd like to have an extra method FooBar, you can create class mylist (list) and define FooBar alone.
Thanks to dynamic typing, you don't even need to handle types where you'd inevitably need to in other languages. For example, you can take an object and call on it a method of a completely different class.