Потому что s = self.s
не делает s
другим именем для "что бы вы ни получили, проверяя self.s
, всегда и навсегда"; это делает s
другим названием для «того, на что self.s
ссылается сейчас».
Целое число 0
является объектом. В первой функции вы заставляете self.s
и s
оба ссылаться на этот объект, а затем заставляете self.s
ссылаться на что-то другое (результат сложения) через другую s
, локальную для другой функции , s
локально по отношению к первой функции не изменяется.