zoukankan      html  css  js  c++  java
  • python中字典的陷阱

    把字典与列表组合,如

    i=20
    s=[]#定义一个空列表
    b={'d':i}#定义一个字典
    while i>0:
         i=i-1
         b['d']=i#更新字典的值
         s.append(b)
    print(s)

    结果为

    [{'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}, {'d': 0}]
    >>> s[0]['d']=90
    >>> s
    [{'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}, {'d': 90}]

    只改变第一个元素,也是这样,

    s的每个元素都是同一个字典实例,改变列表任何一个元素中字典的值,就全部改变了

    若改为:

    i=20
    s=[]
    while i>0:
         i=i-1
         b={'d':i}#每次重新定义b,并赋值
         s.append(b)
    print(s)

    结果为

    [{'d': 19}, {'d': 18}, {'d': 17}, {'d': 16}, {'d': 15}, {'d': 14}, {'d': 13}, {'d': 12}, {'d': 11}, {'d': 10}, {'d': 9}, {'d': 8}, {'d': 7}, {'d': 6}, {'d': 5}, {'d': 4}, {'d': 3}, {'d': 2}, {'d': 1}, {'d': 0}]

    则是我们想要的结果

    第一种情况:是每个列表元素,其实是一个实例, 其实循环里只是 在更新字典的值

    第二种情况:每次重新定义字典

  • 相关阅读:
    JavaScript--Function类型(11)
    CSS--清除浮动
    JavaScript--正则表达式(笔记)
    JavaScript--模块化编程(笔记)
    原生javascript-图片滚动按需加载
    原生javascript-图片按钮切换
    原生javascript-图片弹窗交互效果
    对CSS了解-overflow:hidden
    对CSS了解-选择器权重
    TaskTimer
  • 原文地址:https://www.cnblogs.com/wanglei0103/p/7197754.html
Copyright © 2011-2022 走看看