Sounds fine, they're both immutable which helps.
qwop
UTF-8 is an encoding for unicode, that means it's a way of representing a unicode string as actual bytes on a computer.
It is variable length and works by using the first bits of each byte to indicate how many bytes are are needed to represent the current character.
Python also uses an encoding, as you describe in the article, but it's different to UTF-8. Unlike unicode, all characters in Python's representation of the unicode string use the same number of bytes, which is the maximum that any individual unicode character in the string needs.
I'd probably mess up a more detailed explanation of UTF-8 or Python's representation, so I'll let you look into how they work in more detail if you're interested.
The article says that CPython represents strings as UTF-8 encoded, which is not correct. The details about how it works are correct, just that's not UTF-8.
That's just a minor point though, nice article.
It's described in PEP 585, https://peps.python.org/pep-0585/#parameters-to-generics-are-available-at-runtime
It'd be nice to have a rule specifically for the use of f-strings and template formatting in the same call, since that can easily be a security vulnerability.
I'm pretty sure most type checkers recognise both forms.
I'd be happy if we'd just accepted "referer" as the correct spelling for everything, but instead we have the "Referrer-Policy" header, so now I need to check the correct spelling for anything involving referring..
I do sort of like the idea that because we want to keep backwards compatibility on software we just change the language instead since that's easier.
The full changelog for this release is here https://docs.python.org/release/3.11.7/whatsnew/changelog.html#python-3-11-7-final
Surprisingly not shown that obviously in the release announcements, but I guess that's fair since most of the changes will have no effect on 99.9999% of people.