鱼C论坛

 找回密码
 立即注册
查看: 1384|回复: 5

[已解决]fromkeys的用法,是创建一个新的字典?

[复制链接]
发表于 2020-11-27 22:09:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
4. 请目测下边代码执行后,字典dict1的内容是什么?
1. >>> dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))
2. >>> dict1.fromkeys((1, 3), '数字')

答:执行完成后,字典dict1的内容是:{1: '数字', 3: '数字'}
这里要注意的是,fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。


以上是老师的答案,我自己试验了一下:
>>> dict1={}
>>> dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))
{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
>>> dict1.fromkeys((1, 3), '数字')
{1: '数字', 3: '数字'}
>>> dict1
{}

怎么感觉老师的答案错了?
最佳答案
2020-11-27 22:13:40
本帖最后由 Twilight6 于 2020-11-27 22:14 编辑


甲鱼哥的意思是,如果先执行  dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))

然后在执行  dict1.fromkeys((1, 3), '数字') , 执行该代码后的内容是什么

如果 fromkeys 方法不是直接创建一个新的字典,而是在原字典上进行修改,那么第一次执行第一个代码时候结果为:1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

那么第二次执行后代码一个是在原 1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')} 字典上进行改变的

显然,我们运行后会发现并不会,得到的结果是:{1: '数字', 3: '数字'},并不被第一行代码的执行所影响第二行代码的结果

所以得到答案的结论:fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 22:13:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-11-27 22:14 编辑


甲鱼哥的意思是,如果先执行  dict1.fromkeys((1, 2, 3), ('one', 'two', 'three'))

然后在执行  dict1.fromkeys((1, 3), '数字') , 执行该代码后的内容是什么

如果 fromkeys 方法不是直接创建一个新的字典,而是在原字典上进行修改,那么第一次执行第一个代码时候结果为:1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

那么第二次执行后代码一个是在原 1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')} 字典上进行改变的

显然,我们运行后会发现并不会,得到的结果是:{1: '数字', 3: '数字'},并不被第一行代码的执行所影响第二行代码的结果

所以得到答案的结论:fromkeys方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-27 22:13:53 | 显示全部楼层
老师说了呀fromkeys是创立一个新字典
所以最开始的dict1还是空的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-28 10:24:11 | 显示全部楼层
python 类语法中有三种方法,实例方法,静态方法,类方法
实例方法只能被实例对象调用
静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
fromkeys方法是dict类的静态方法 和实例无关 所以无法影响到实例
类似的方法还有  datetime.time.fromisoformat      datetime.datetime.now
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-28 20:00:27 | 显示全部楼层
小伤口 发表于 2020-11-27 22:13
老师说了呀fromkeys是创立一个新字典
所以最开始的dict1还是空的

{1: '数字', 3: '数字'}算是dict1的内容吗?这应该算是新一个字典的内容?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-28 20:29:42 | 显示全部楼层
Ida_c 发表于 2020-11-28 20:00
{1: '数字', 3: '数字'}算是dict1的内容吗?这应该算是新一个字典的内容?


算新的
就像楼上说的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表