Ответ основан на комментариях hpaulj и скрытых экспериментов и обучения ...
Назначение kdef = sym.Symbol('k_{def}')
присваивает имя 'k_{def}'
, потому что это атрибут класса sym.Symbol
.
Позднее присваивание kdef = sym.tan(b*x)
просто определяет новый объект класса sym.tan
и использует kdef
в качестве переменной для него, но на самом деле оно не имеет ничего общего с предыдущим объектом. Таким образом, на данный момент больше нет связи между kdef
и 'k_{def}'
.
Это легко увидеть с помощью:
kdef = sym.Symbol('k_{def}')
print('kdef = ', kdef, ', address = ', hex(id(kdef)), sep='')
kdef = sym.tan(b*x)
print('kdef = ', kdef, ', address = ', hex(id(kdef)), sep='')
kdef = k_{def}, address = 0x20f21b58228
kdef = tan(b*x), address = 0x20f21b584f8
Это даже происходит с присвоениями того же типа, где в принципе можно использовать один и тот же точный блок памяти:
q = 2.1
print('q = ', q, ', address = ', hex(id(q)), sep='')
q = 30000.1
print('q = ', q, ', address = ', hex(id(q)), sep='')
q = 2.1, address = 0x1c4dbd5d0d0
q = 30000.1, address = 0x1c4dbd5d2b0
Кроме того, также оказывается, что класс sym.tan
не имеет name
, поэтому получить его невозможно, потому что он не существовать. Поскольку данная переменная может иметь или не иметь name
, можно просто try
/ expect
или запросить dir()
.