更改名称在字符串中的python变量的值

时间:2014-03-27 20:19:02

标签: python list variables dictionary

在你说使用字典之前,我想改变实际变量的值。

标准的dict策略会发生这种情况:(注意,我不一定使用列表,值可能是复杂的类类型,也可能只是常规的类型)

>>> dict = {}
>>> x = [1,2,3]
>>> dict["x"] = x
>>> x
[1, 2, 3]
>>> dict["x"]
[1, 2, 3]
>>> dict["x"] = [4,5,6]
>>> dict["x"]
[4, 5, 6]
>>> x
[1, 2, 3]
>>>

任何人都知道这样做的方法,以便x的实际内容也改变了吗? copy.deepcopy也没有做到这一点。 (如'dict [“x”] = copy.deepcopy(x)')

2 个答案:

答案 0 :(得分:4)

使用切片分配:

>>> d = {}
>>> x = [1, 2, 3]
>>> d['x'] = x
>>> d['x'][:] = [4, 5, 6]
>>> x
[4, 5, 6]
>>> d['x']
[4, 5, 6]

对于其他数据类型,请确保您就地修改它们而不是将它们分配给新变量。请注意,对于int,strings等不可变数据类型,没有可用的就地操作。

答案 1 :(得分:2)

这是一个可怕的想法和可怕的代码味道的臭味...不要这样做需要重构代码是明智的....这是一个可怕的想法,但如果你想要< / p>

mutables = {
"x":x,"y":y,"Z":Z #make sure the dict key is exactly the same as var name
}

mutables['x'] = [5,6,7]
for k,v in mutables.items():
    globals()[k] = v

请注意,您需要与原始变量处于相同的全局范围