【问题标题】:dictionaries, python functions, global and local variables, memory字典、python 函数、全局和局部变量、内存
【发布时间】:2023-03-19 10:49:01
【问题描述】:

我有一些看起来像这样的代码:

>>> 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和dataDict 3完全一样。

>>> dataDict1
{'feature4': [1, 2], 'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}
>>>

我希望 dataDict1 是

{'feature2': [1, 2], 'feature3': [1, 2], 'feature1': [1, 2]}

我认为我不了解 python return 语句的工作方式。或者可能是局部变量和全局变量。有人可以解释一下吗?

【问题讨论】:

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

标签: python variables dictionary global local


【解决方案1】:

这一行:

...     data_Dict[featureLabel] = [1, 2]

修改参数data_Dict。如果你不想(看起来)函数修改它的参数,你需要先克隆参数:

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

【讨论】:

    猜你喜欢
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多