Fundamentally that is how Python variables work.

A plain assignment = as in p = foo just means "take whatever is on the right side and give it the name on the left side (p). There isn’t anything (__something__) called when
This is in stark contrast to the superficially similar p[something] = or x.p = which call p.__setitem__ and x.__setattr__ under the hood.

Best regards
Thomas