为什么用具有相同名称但不同符号名称的变量替换表达式中的变量不起作用

Why does replacing a variable in a expression by variable with same name but different symbol name not work

如何用新的定义替换函数中的变量 初始变量 ?

import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x

此时在解释器中输入 g 打印:
5*a*x。

现在我想用 alpha 替换打印的 a。为什么 以下无效?

a = sy.symbols("alpha")
g = g.subs(a,a)

我很清楚我可以使用以下内容:

import sympy as sy
g, a, x = sy.symbols("g a x")
g = 5*a*x
alpha = sy.symbols("alpha")
g = g.subs(a,alpha)

但我想了解为什么前一种方法不起作用。一般来说,我感兴趣的是分配的名称 a= 和符号 ("a") 中的字符串是如何连接的。它们必须相同才能使 sympy 正常工作吗?

g = g.subs(a, a) 永远不能做任何事情,因为它正在用自己替换一个东西。

用其他东西替换a

g.subs(a, sy.symbols('alpha'))

应该使用。 SymPy 文档中的相关主题是 Assignment does not create a relation。一个更简单的例子:

a = sy.symbols('a')
b = a + 3      # b is now a+3 
a = 5          # b is still a+3 and it will not become 8

在此代码的末尾,Python 变量 a 与名为 "a" 的 SymPy 符号无关。变量为5;该符号仍然是 Symbol("a") 并且将永远如此,因为 SymPy 表达式是不可变的。而不是 a = 5 应该 b.subs(a, 5) 来执行替换。

I am interested how the assigned name a= and the string in symbols("a") are connected.

他们根本没有联系。使用 Python 变量 a 指向名为 "a" 的符号很方便,这是人们这样做的唯一原因。不幸的是,该模式随后误导他们认为如果他们放置 a = 新的东西,那将对 Symbol("a") 产生影响——它不会。唯一的影响是 Python 变量现在指向其他东西;包含 Symbol("a") 的表达式不受影响。