制作一个dict传值的列表

skv*_*len 1 python pass-by-value

我在dict列表中有点头疼.

def funk(x):
    for i in x:
        i['a'] += 1
        print i

list1 = [{'a':1, 'b':2}, {'a':3, 'b':4}]
funk(list1)
print list1
Run Code Online (Sandbox Code Playgroud)

这将输出:

{'a': 2, 'b': 2}
{'a': 4, 'b': 4}
[{'a': 2, 'b': 2}, {'a': 4, 'b': 4}]
Run Code Online (Sandbox Code Playgroud)

但我希望有这个:

{'a': 2, 'b': 2}
{'a': 4, 'b': 4}
[{'a':1, 'b':2}, {'a':3, 'b':4}]
Run Code Online (Sandbox Code Playgroud)

如何使list1保持不变?例如:[{'a':1,'b':2},{'a':3,'b':4}]

NPE*_*NPE 5

funk()可以制作副本x并修改该副本,而不是修改原始副本x.

import copy

def funk(x):
    x = copy.deepcopy(x)
    for i in x:
        i['a'] += 1
        print i

list1 = [{'a':1, 'b':2}, {'a':3, 'b':4}]
funk(list1)
print list1
Run Code Online (Sandbox Code Playgroud)

  • 你应该说'deepcopy`.因为`x`是一个包含`dicts`的列表,所以浅拷贝不会削减它. (3认同)