Understanding variable types, names and assignment
<p>In Python, if you want to define a  variable, you don't have to specify the type of it, unlike other languages such as C and Java.</p>

<p>So how can the Python interpreter distinguish between variables and give it the required space in memory like <code>int</code> or <code>float</code>?</p>

<p>Python is dynamically typed language which means that the type of variables are decided in running time. As a result python interpreter will distinguish  the variable's types (in running time) and give  the exact space in memory needed. Despite being dynamically typed, Python is strongly typed, forbidding operations that are not well-defined (for example, adding a number to a string) . </p>

<p>On the other hand C and C++ are statically typed languages which means that the types of variables are known in compilation time.</p>

<p>Using dynamic typing in programming languages has the advantage that gives more potential to language, for example we can have lists with different types (for example a list that contains chars and integers). This wouldn't be possible with static typing since the type of the list should be known from the compilation time...).<br>
One disadvantage of dynamic typing is that the compiler-interpreter in many cases must keeps a record of types in order to extract the types of variables, which makes it more slow in comparison with C or C++.</p>

<p>A dynamic typed language like python can be also strongly typed. Python is strongly typed as the interpreter keeps track of all variables types and is restrictive about how types can be intermingled.</p>

python