Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Dictionary_Global_Local - Fatal编程技术网

字典、python函数、全局和局部变量、内存

字典、python函数、全局和局部变量、内存,python,variables,dictionary,global,local,Python,Variables,Dictionary,Global,Local,我有一段代码如下所示: >>> dataDict1 = {'feature1': [], 'feature2': [], 'feature3': []} >>> features = {0 : 'feature1', 1: 'feature2', 2: 'feature3'} >>> >>> def f(data_Dict, featureLabel): ... data_Dict[featureLabel] = [

我有一段代码如下所示:

>>> dataDict1 = {'feature1': [], 'feature2': [], 'feature3': []}
>>> features = {0 : 'feature1', 1: 'feature2', 2: 'feature3'}
>>>
>>> def f(data_Dict, featureLabel):
...     data_Dict[featureLabel] = [1, 2]
...     return data_Dict
>>>
>>> for i in range(3):
...     dataDict2 = f(dataDict1, features[i])
...     print dataDict2
...
{'feature2': [], 'feature3': [], 'feature1': [1, 2]}
{'feature2': [1, 2], 'feature3': [], 'feature1': [1, 2]}
{'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
>>>
>>> dataDict2
{'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
>>> dataDict3 = f(dataDict2, 'feature4')
>>>
>>> dataDict3
{'feature4': [1, 2], 'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
>>> dataDict2
>>>
{'feature4': [1, 2], 'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
我想我明白这里发生了什么。但是当我输入dataDict1时,我得到的与dataDict2和datadict3完全相同

>>> dataDict1
{'feature4': [1, 2], 'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
>>>
我希望dataDict1是

{'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
我认为我不理解python返回语句的工作方式。或者局部变量和全局变量。有人能解释一下吗?

这行:

...     data_Dict[featureLabel] = [1, 2]
就地修改参数
data\u Dict
。如果您不想(看起来)让函数修改其参数,则需要首先克隆参数:

...     data_Dict = dict(data_Dict)
...     data_Dict[featureLabel] = [1, 2]

您正在使用不同变量的单个dict引用。不,您在何处创建副本。