按值传递变量

时间:2018-10-18 22:40:23

标签: python reference variable-assignment key-value

我有一个词典列表:

list = [{"id":2, "date": "2018-07-12"}]

现在,我想生成一些不错的输出并为其提供功能:

def generateOutput(myList):  
   outputList = []        
   for l in myList:            
      l['date_short'] = "Jul-12"
   outputList.append(l)

   return outputList

这就是灾难开始的地方:

output = generateOutput(list)

输出很好,但是我需要进一步计算的列表,根本不应该具有date_short的列表有一个新密钥,并且是:

list = [ {"id":2, "date": "2018-07-12", "date_short": "Jul-12" }]

如何克服这个问题?

2 个答案:

答案 0 :(得分:4)

您正在就地myList中修改字典。相反,您可能想在将新值添加到它们之前分别复制它们。试试这个:

def generateOutput(myList):
    outputList = []
    for l in myList:
        output = l.copy()
        output['date_short'] = "Jul-12"
        outputList.append(output)
    return outputList

此外,您应该避免命名变量list,因为list是Python中预定义类型的名称。

答案 1 :(得分:0)

使用copy模块将变量的副本传递给函数。

import copy

list = [{"id":2, "date": "2018-07-12"}] 

def generateOutput(myList):  
   outputList = []        
   for l in myList:            
      l['date_short'] = "Jul-12"
   outputList.append(l)

   return outputList

generateOutput(copy.copy(list))