Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改名称为字符串的python变量的值_Python_List_Variables_Dictionary - Fatal编程技术网

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

更改名称为字符串的python变量的值,python,list,variables,dictionary,Python,List,Variables,Dictionary,在您说使用字典之前,我想更改实际变量的值 标准dict策略就是这样的:(注意,我不一定使用列表,值可以是复杂的类类型,也可以是普通的int) 有人知道这样做的方法吗?这样x的实际内容也会改变?copy.deepcopy也不起作用。(如“dict[“x”]=copy.deepcopy(x)”中所述)使用切片分配: >>> d = {} >>> x = [1, 2, 3] >>> d['x'] = x >>> d['x'][:]

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

标准dict策略就是这样的:(注意,我不一定使用列表,值可以是复杂的类类型,也可以是普通的int)

有人知道这样做的方法吗?这样x的实际内容也会改变?copy.deepcopy也不起作用。(如“dict[“x”]=copy.deepcopy(x)”中所述)

使用切片分配:

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

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

这是一个可怕的想法,并且散发着可怕的代码气味。。。不要这样做。你需要重构代码才能变得明智。。。。这是个糟糕的主意,但如果你愿意

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

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

您还没有说服我您不需要字典。为什么要按名称访问变量?请参见@LevLevitsky,我希望x在我的赋值后包含[4,5,6]。但为什么要使用字符串访问变量
x
?为什么不继续以
dict[“x”]
的形式访问它呢?我不拥有代码,也不能重构它。这对OP:
不起作用(注意,我不一定使用列表,值可能是复杂的类类型或普通的int)
。当然,但原理是一样的——就地修改数据,不要覆盖它。@ThaneBrimhall:无法在适当的位置修改int。实际上,如果我使用long,它会抱怨。(“'long'对象不支持项目分配”)@ThaneBrimhall:但是
int
的值可以更改,(
x=1
,或者
exec(“%s=1”%varname)
),这大概是OP想要的(尽管这是个坏主意)。是的,我知道这是个坏情况,我希望代码的所有者能够重构它,因为我没有修改它的权限。
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