Python fromkeys()的'bug'

前几天与朋友讨论字典中fromkeys()的方法时遇到个问题,看下例子:

咦! 奇怪了我只向其中一个value添加1其他元素都添加了,有的人戏谑称python的小‘bug’,

其实不是我们想象的那样了,先看看fromkeys()的定义:

def fromkeys(*args, **kwargs):  # 将所有key都赋予相同的值,第一参数为key,第二个

参数为value,如果没有第二个参数则默认为none;

噢! 那么说将列表赋值给第一个参数key值,那是怎么赋值的呢? 我们来看下面一个例子:

哈哈!这回明白怎么回事了,原来都是同一值呀,只不过字典中的key同时指向了一个列表,这个迷惑也不

攻自破了。

这个事是明白了,那我要是非要把字典中每个key定义不同的列表呢? 这个简单啊!

>>> test = {1:[],2:[],3:[]}

>>> test

{1: [], 2: [], 3: []}

>>> test[1].append(1)

>>> test

{1: [1], 2: [], 3: []}

哈哈 !当然不能这么搞了,要是弄成百上千个元素那可惨了!亮有一技!

>>> test = {}

>>> for i in range(10):

...     test[i] = []

...

>>> test

{0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}

>>> test[0].append(a)

{0: [a], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: []}

暂时只想到了介个办法,如有更好的办法欢迎来踩!

Python fromkeys()的'bug'

时间: 2024-08-18 14:24:14

Python fromkeys()的'bug'的相关文章

python语言的bug

环境:ubuntu,python3.4 1.问题一:以下语句语句是取每行的头元素,其中line应该是一个列表.问题是,line在实际运行中已经不是列表,而变成了列表中的头元素. {key:line[0] for key,line in list_info.items() if len(line)>0}

python公司面试题集锦 python面试题大全

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案 以上代码的

Python面试题汇总

原文:http://blog.csdn.net/jerry_1126/article/details/44023949 拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可以从中学到点什么,答案如不妥,请指正...... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [题目:001]| 说说你对zen of python的理解,你有什么办法看到它? Python之禅,Python秉承一种独特

七、PYTHON 一些基础面试题目总结

1.       Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引用计数增加的情况: 1,一个对象分配一个新名称 2,将其放入一个容器中(如列表.元组或字典) 引用计数减少的情况: 1,使用del语句对对象别名显示的销毁 2,引用超出作用域或被重新赋值 sys.getrefcount( )函数可以获得对象的当前引用计数 多数情况下,引

PYTHON 一些基础面试题目总结

PYTHON 一些基础面试题目总结http://www.bieryun.com/1191.html 1.       Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引用计数增加的情况: 1,一个对象分配一个新名称 2,将其放入一个容器中(如列表.元组或字典) 引用计数减少的情况: 1,使用del语句对对象别名显示的销毁 2,引用超出作

2018年 Python面试必看的10个问题及答案

最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台 938587844 . 找工作是每个学习Python人员的目标,为了更好的找到工作,刷面试题是必不可少的,了解最新企业招聘试题,可以让你面试更加的顺利.小编整理了一些2018年最新的Python面试题,来测测你技术的掌握度吧. 1.Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个. 浅拷贝:创建一个新的对象,但它

python自测100题,来看看你和月薪3万的差距(含答案)

-------------人生苦短,必须性感! 1.为什么学习Python? 人生苦短?人间不值得?想想自己的初心吧! 2.通过什么途径学习的Python? 官网.网上视频.学习网站.论坛.大牛的辅导 3.Python和Java.PHP.C.C#.C++等其他语言的对比? (1).python代码,简介,明确,优雅,简单易懂(2).开发效率高(3).可扩展性强 4.简述解释型和编译型编程语言? 解释型:在执行程序时,计算机才一条一条的将代码解释成机器语言给计算机来执行编译型:是把源程序的每一条语

【Python】初学编程适合学Python?其有何用?

初学编程适合学Python?其有何用? 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多因素造成了,当然市场需求的重要因素.吴军博士对大数据流行的解释与python流行或许有些默契.数据一直以来都存在,只是在历史条件下,由于计算性能和技术发展的原因,与之匹配的数据处理技术还不是很先进,以至于很多数据被我们舍弃了.同样,python语言简洁流畅等多种优点,也会让第一次接触

Python静态检查工具

Python是一门动态语言.在给python传参数的时候并没 有严格的类型限制.写python程序的时候,发现错误经常只能在执行的时候发现.有一些 错误由于隐藏的比较深,只有特定逻辑才会触发,往往导致需要花很多时间才能将语法错误慢慢排查出来.其实有一些错误是很明显的,假如能在写程序的时候发现这些错误,就能提高工作效率. 注:习惯了C/C++等编译语言,使用像Python这种动态语言,总有点不放心,特别是搭建比较大的系统的时候.Python静态语法检查工具就出现了. Pyflakes(错误检查利器