推荐答案
测试一下
题目
3.1 keys和values函数 ................................ ................................ ................................ ..…
参考答案与知识点
参考答案
本题考察的是Python字典中keys()和values()方法的核心特性及版本差异。在Python3中,dict.keys()返回的是dict_keys视图对象,dict.values()返回dict_values视图对象。这些视图对象是动态的:当字典本身发生增删改操作时,视图会实时反映变化;支持迭代(for k in d.keys())和成员测试(k in d.keys()),但不支持索引操作(如d.keys()[0]会抛出TypeError)。视图对象的内存效率更高,因为它们不复制键或值的列表,而是提供对原始字典数据的只读引用。若需要静态列表,必须显式调用list(d.keys())。Python2中,这两个方法直接返回列表对象,列表在创建后不会随字典变化而更新,且复制所有键/值到新列表,占用更多内存。在Python2.7中虽引入了viewkeys()等方法来模拟Python3行为,但默认keys()仍返回列表。常见考点有:1) 视图对象的动态性与惰性求值;2) 视图支持集合运算(如键视图支持&、|、-等操作)而值视图不支持(因为值可能重复且不可哈希);3) 在for循环中直接遍历字典等价于遍历d.keys(),但遍历视图时修改字典需注意可能会导致运行时异常(RuntimeError: dictionary changed size during iteration),与列表遍历不同。易错点:混淆Python2与Python3的返回类型,误认为视图对象可直接索引,或忽视视图对象在字典修改时的行为。
涉及知识点
- Python字典keys()与values()方法
- 视图对象(dict_keys/dict_values)特性
- Python2与Python3版本差异
- 内存效率与动态更新机制
- 视图支持的集合运算有限性