Python 中的 dict 视图对象
Python 中 dict.keys()、dict.values()、dict.items() 返回的视图对象(view)是什么?有什么特性?
回答
小字辈
视图对象是动态反映字典变化的只读可迭代对象,不占用额外内存。
d = {'a': 1, 'b': 2}
keys = d.keys()
values = d.values()
items = d.items()
print(list(keys)) # ['a', 'b']
# 动态反映
d['c'] = 3
print(list(keys)) # ['a', 'b', 'c']
特性:
- 动态性:字典变化,视图自动更新
- 内存高效:不复制数据
- 集合运算:keys/items 支持 & | - ^ 运算(values 不支持,因为值可能重复)
- 迭代性能好:直接访问底层哈希表
- Python 3 中返回视图(Python 2 返回列表)
# 集合运算
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys()) # {'b'}
print(d1.items() & d2.keys()) # TypeError