Вкратце:
Как изменить комплексное число в Python без построения новый комплекс?
У вас нет. Вы можете использовать элементы старого комплексного номера (если вы часто это делаете, вы можете написать функцию для этого) или создать свой собственный класс сложных чисел.
Любые идеи, почему комплекс был реализован следующим образом?
Комплексные номера являются числовым и, как и все числовые типы python, неизменяемы.
Longer объяснение:
Вы не можете изменить int
, float
, namedtuple
или frozenset
больше, чем вы можете изменить комплексное число. Сложные числа неизменяемы, что имеет свои преимущества (одним из наиболее важных среди них является то, что вы можете использовать сложные номера в качестве словарных клавиш). Большинство операций, которые вы выполняете со сложными числами, по-прежнему являются математическими и, следовательно, поддаются неизменности (как и все другие числовые типы). Если это не так, подумайте о создании собственного класса, возможно, с атрибутом __slots__
.
Мой совет: некоторые разработчики стремятся к неизменности в своих структурах данных. Это делает программирование и отладку существенно менее сложными. Комплексные номера в python были хорошо разработаны.
в значительной степени по той же причине вы не можете сделать 'a = 4', а затем' a.real = 10'. – dmg
@ DJV Нет, в вашем примере это также волшебным образом изменило бы тип, что еще хуже. – delnan
@ delnan а как насчет того, как вы пытаетесь выполнить 'dir (4)' или 'print (4) .imag' перед тем, как перейти к выводам? – dmg