• python 嵌套字典、列表 赋值 出现相同值 问题


    错误代码:

    import copy
    lists={}
    test=['s1','s2','s3']
    data = {'value': '',}
    for i in range(2):
        lists[i] = data
    
    for j in range(2):
        lists[j]['value']=test[j]
    
    print(lists)

    结果:

    Connected to pydev debugger (build 182.5107.22)
    {0: {'value': 's2'}, 1: {'value': 's2'}}

    改正后代码

    import copy
    lists={}
    test=['s1','s2','s3']
    data = {'value': '',}
    for i in range(2):
        lists[i] = copy.deepcopy(data)
    
    for j in range(2):
        lists[j]['value']=test[j]
    
    print(lists)

    结果:

    Connected to pydev debugger (build 182.5107.22)
    {0: {'value': 's1'}, 1: {'value': 's2'}}

    原因:

    lists[i] = data 在执行 赋值时, 每一次调用的都是 data变量的源地址,并没有改变地址。
    所以我们在下面动态的改变值的时候,就会出现改变一个值,所有结果全部改变。
    类似于python的浅拷贝和深拷贝。 所以只需要将其变为深拷贝即可。copy.deepcopy().

    补充:

    # 这个是嵌套列表 也会出现相同问题 
    import
    copy lists=[] test=['s1','s2','s3'] data = [1] for i in range(2): lists.append(data) lists[0].append('1') print(lists)

    结果:

    [[1, '1'], [1, '1']]

    改正:

    import copy
    lists=[]
    test=['s1','s2','s3']
    data = [1]
    for i in range(2):
        lists.append(copy.deepcopy(data))
    
    lists[0].append('1')
    print(lists)

    结果:

    [[1, '1'], [1]]

    原因同上

    邮箱: 1090055252@qq.com
  • 相关阅读:
    linux(不会考特别难,牢记下面即可)
    ajax
    Javascript 和 Jquery
    开发环境及配置
    网络协议考点
    面向对象考点
    会话控制
    文件操作
    正则表达式
    自定义函数和内部函数
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13262324.html
Copyright © 2020-2023  润新知