繁体   English   中英

为什么 Python 中的 list.append() 会更改原始列表中的每个项目?

[英]Why list.append() in Python changes every item in the original list?

我有这段代码:

import json

a = '''
{
    "c": {
        "d": [
            {
                "e": "f"
            }
        ]
    }
}
'''
j = json.loads(a)
l = []

for n in range(20):
    if n % 2 == 0:
        j['c']['d'][0]['e'] = n
        l.append(j)
        
print(l)

这段代码的output:

[{'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}, {'c': {'d': [{'e': 18}]}}]

output 我预计:

[{'c': {'d': [{'e': 0}]}}, {'c': {'d': [{'e': 2}]}}, {'c': {'d': [{'e': 4}]}}, {'c': {'d': [{'e': 6}]}}, {'c': {'d': [{'e': 8}]}}, {'c': {'d': [{'e': 10}]}}, {'c': {'d': [{'e': 12}]}}, {'c': {'d': [{'e': 14}]}}, {'c': {'d': [{'e': 16}]}}, {'c': {'d': [{'e': 18}]}}]

如何获得预期的 output?

当您修改j并随后将 append 修改为l时,它是对与您 append 相同的 dict 的引用。 这是对副本进行操作的一种方法:

import copy
import json

a = '''
{
    "c": {
        "d": [
            {
                "e": "f"
            }
        ]
    }
}
'''
j = json.loads(a)
l = []
for n in range(10):
    j2 = copy.deepcopy(j)
    j2['c']['d'][0]['e'] = 2 * n
    l.append(j2)
        
print(l)

你 append 到列表l是相同的字典。 为了避免这种情况,试试这个。

import json
import copy

a = '''
{
    "c": {
        "d": [
            {
                "e": "f"
            }
        ]
    }
}
'''
j = json.loads(a)
l = []

for n in range(20):
    if n % 2 == 0:
        j['c']['d'][0]['e'] = n
        l.append(copy.deepcopy(j))

print(l)

供参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM