Я не знаю, какие языки программирования вы знаете, но Python здесь работает иначе, чем другие языки.В C ++ вы просто предполагаете, что переменная x существует 3 раза как собственные экземпляры, что означает, что переменные независимы друг от друга.Это привело бы к выходной последовательности 10 10 10 12 20 8.
Однако я думаю, что для Python здесь происходит следующее:
- Вы создаете класс A с переменной x= 10. При создании классов B и C они не создают свою собственную переменную x.Вместо этого B и C имеют «ссылку» на Ax. Поэтому сначала вы получаете 10 10 10.
- Вы меняете Ax + = 2, так что теперь x = 12.Когда вы изменяете Bx * = 2, то для Bx делается следующее назначение: Bx = Ax * 2. С этого момента Bx является собственной переменной, независимой от Ax То же самое происходит для Cx - = 2. Это приводит кпоследовательность 12 24 10.
Я думаю, что для Python вам нужно знать понятие «вызов по объекту», которое вездесуще.Он отличается от известных понятий «вызов по значению» или «вызов по ссылке».См. Также Является ли вызов Python ссылкой или значением .