Warum verursacht Code wie `str = str(...)` einen TypeError, aber nur beim zweiten Mal?

Code wie str = str(...) verursacht einen TypeError, weil es versucht, den eingebauten str Typ auf einen neuen Wert neu zuzuweisen, was nicht erlaubt ist. Diese Art der Zuweisung ist in einigen Programmiersprachen erlaubt, aber nicht in Python. Der TypeError wird nur beim zweiten Mal auftreten, weil das erste Mal die eingebaute str-Funktion auf die vom Benutzer definierte Variable überschreibt und dann beim zweiten Mal versucht wird, die Variable zu überschreiben, was nicht erlaubt ist.

Hier ist ein Beispiel dafür:

str = "Hello, World!"
print(str) # Output: "Hello, World!"

str = str(123)
print(str) # Output: TypeError: 'str' object is not callable

Man könnte stattdessen einen anderen Variablennamen verwenden, anstatt str, um dieses Problem zu vermeiden und str() ohne Probleme verwenden zu können.

my_str = "Hello, World!"
print(my_str) # Output: "Hello, World!"

my_str = str(123)
print(my_str) # Output: "123"