A programming language usually defines numerous base types for it’s variables. Examples include strings and integers.
In most languages, there is a need for an all-encompassing type of variable that, in theory, can store any value.
This type is variously defined as the union type, the void pointer or the empty interface in different languages. In a duck typed language such as Python, all variables can take on any type based on runtime usage.