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}]

    则是我们想要的结果

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

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

  • 相关阅读:
    通过另外一个应用程序给多个文本框赋值, 模拟单击事件
    AngularJS
    九章算法
    实现继承
    二分查找
    NET Core依赖注入解读&使用Autofac替代实现
    NET SignalR 与 LayIM2.0
    WebVR
    依赖注入
    如何实现配置与源文件的同步
  • 原文地址:https://www.cnblogs.com/wanglei0103/p/7197754.html
Copyright © 2011-2022 走看看