In C haben Variablen Typen, d.h. C merkt sich für den Speicherplatz, dem der den Namen a gegeben hat, wie die Bits darin zu interpretieren seien. Ein Bitmuster wird zu einem Wert erst dadurch, dass ihm über den Typ eine Interpretation gegeben wird. Die Zuweisung kopiert ein Bitmuster von einer Speicherstelle an eine andere – da aber der Typ nicht am Bitmuster, sondern an der Speicherstelle hängt, würde sich dadurch der Wert unter Umständen dramatisch ändern. Die Semantik der Zuweisung soll aber sein, dass nach der Zuweisung b = a die Variable b denselben Wert wie a hat. Die Typprüfung ist also letzlich eine Sicherung der Semantik der Zuweisung.
Python hat dieses Problem nicht. Werte in Python sind in gewissem Sinn atomar, sie bestehen nicht aus den zwei Teilen “Bitmuster” und “Typ” (gleichwohl Python natürlich durchaus auch Typen kennt – sie sind aber eher Familien von Werten und weniger Vorschriften, wie Bitmuster zu interpretieren seien). Darüber hinaus kopiert eine Zuweisung auch fast nichts, denn sie bewirkt ja lediglich, dass ein Name an einen Wert gebunden wird. Der Ausdruck b = a sagt Python: Bestimme den Wert, auf den a verweist und lasse auch b darauf verweisen. Damit ist die oben geforderte Semantik auf jeden Fall gesichert.