最初我误解了你的问题,我看到那种善意做对了.但我认为这个问题需要更详细地解释Python的工作原理.在Python中考虑变量的最佳方法是将变量名称视为附加箭头,将值视为这些箭头指向的对象.变量名称指向对象.所以当你这样做时:
a = 1
你真的在说“分数为1”.当你这样做:
b = a
你真的在说“b指的是同一个对象”.一般情况下,变量不能指向另一个变量名;它只能指向另一个变量指向的同一个对象.所以当你这样做时:
tom = [a, b, c]
您没有创建指向变量名称a,b和c的列表;您正在创建一个指向与a,b和c相同的对象的列表.如果你改变点的位置,它对tom [0]指向的位置没有影响.如果改变tom [0]指向的位置,它对点的位置没有影响.
现在,正如其他人所指出的,您可以通过编程方式更改变量名的值,使用exec(如建议的那样)(不推荐),或者通过更改globals()(也不推荐).但大部分时间,这都是不值得的.
如果你真的想这样做,我的建议就是简单地使用一个字典(如DzinX所建议的),或者,对于一个更接近问题精神的解决方案,并且仍然相当干净,你可以简单地使用一个可变对象.然后你可以使用getattr和setattr以编程方式改变该对象的属性,如下所示:
>>> class Foo():
... pass
...
>>> f = Foo()
>>> f.a = 1
>>> setattr(f, 'b', 2)
>>> getattr(f, 'a')
1
>>> f.b
2
通常,最好的解决方案是使用字典.但偶尔也会出现以上情况更好的情况.