Duck typing is a style of dynamic typing where an object's valid operations are defined by which methods and properties it has rather than its class. In duck typing, functions are concerned with the aspects of an object used rather than its specific type. For example, a function taking a "Duck" would work with any object having walk and quack methods, allowing polymorphism without inheritance.