Except that's 100% wrong here. There's not even a facility for marking an object as immutable in Python, so that wouldn't support user-defined classes at all.
Python is always pass-by-object-reference, and assignment is always a pointer operation. It's not special-cased like you're describing.
dicts are mutable, so, it doesn't create a new object to make an assignment
numbers are immutable, so, it does.