Comment le compilateur Python optimise-t-il les opérations de concaténation de chaînes : dans quels cas la déclaration `s = s + "next"` entraînera une nouvelle allocation mémoire et une copie O(N), et dans quels cas CPython effectuera une optimisation en place O(1) ?