fromkeys的用法,是创建一个新的字典?
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
{}
怎么感觉老师的答案错了? 本帖最后由 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方法是直接创建一个新的字典,不要试图使用它来修改一个原有的字典,因为它会直接无情的用把整个字典给覆盖掉。
老师说了呀fromkeys是创立一个新字典
所以最开始的dict1还是空的 python 类语法中有三种方法,实例方法,静态方法,类方法
实例方法只能被实例对象调用
静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
fromkeys方法是dict类的静态方法 和实例无关 所以无法影响到实例
类似的方法还有datetime.time.fromisoformat datetime.datetime.now 小伤口 发表于 2020-11-27 22:13
老师说了呀fromkeys是创立一个新字典
所以最开始的dict1还是空的
{1: '数字', 3: '数字'}算是dict1的内容吗?这应该算是新一个字典的内容? {:10_256:} Ida_c 发表于 2020-11-28 20:00
{1: '数字', 3: '数字'}算是dict1的内容吗?这应该算是新一个字典的内容?
算新的
就像楼上说的
页:
[1]