Dynamic typing is a discipline where variables can hold values of any type, and their types are determined at runtime. The type of a variable can change during the execution of a program. Dynamic typing allows more flexibility but can lead to runtime errors if types are incorrectly handled.
Examples of dynamically typed languages include Python, JavaScript, and Ruby.