zoukankan      html  css  js  c++  java
  • Python 字典 dictionary changed size during iteration

    1 TestMap = {1:0, 2:0, 3:1, 4:1}
    2 for key in TestMap:
    3     TestMap.pop(key)

    运行结果:

    for key in TestMap:
    RuntimeError: dictionary changed size during iteration

    修改一下:

    TestMap = {1:0, 2:0, 3:1, 4:1}
    '''
    for key in TestMap:
        TestMap.pop(key)
    '''
    
    for key in TestMap.keys():
        TestMap.pop(key)

    OK,运行正常。

    分析:“for key in TestMap:”这种方式是通过iterator遍历字典(鄙人YY其内部可能是个链表),边遍历边删除会崩溃啊亲;“for key in TestMap.keys():”这种方式是通过便利一个列表来依次获取每个“key”(TestMap.keys()返回个列表),所以不崩溃啊亲。

    联想:这个不容易发觉的问题让我想起了之前一个通过索引遍历列表,一边遍历一边删除会导致崩溃的问题,可是这两个问题还是有区别的。总的来讲还是遍历删除时要注意的问题。

    本文首发于博客园,任何其他站点均为爬虫或转载,爬虫最无耻。
  • 相关阅读:
    zookeeper安装教程
    CentOS7服务管理(重启,停止,自动启动命令)
    redis配置文件详解
    阿里云 CentOS7安装redis4.0.9并开启远程访问
    rpm命令
    wget命令
    yum命令
    maven项目debug调试不能够进入源码问题解决
    8-字符串
    7-数组
  • 原文地址:https://www.cnblogs.com/codeape/p/2780534.html
Copyright © 2011-2022 走看看