为何Python字典的keys()返回对象会随字典自动更新?
为什么Python中字典的keys()赋值给变量后会自动更新?
先看你给出的示例代码:
car = { "brand": "Ford", "model": "Mustang", "year": 1964 } x = car.keys() print(x) # 现在尝试更新字典 car["color"] = "white" # 未重新用car.keys()方法赋值x print(x)
核心原因
Python里字典的keys()方法返回的不是静态的列表,而是一个动态的dict_keys视图对象——它和原字典是绑定的,不会单独存储键的副本,每次你访问这个对象时,它都会实时去原字典里读取最新的键集合。
也就是说,x = car.keys()并没有把当时的键复制一份给x,而是给x装了个"实时查看窗口",原字典变了,窗口里看到的内容自然也跟着变。
怎么得到固定不变的键集合
如果想让x保存当时的键,不受后续字典更新影响,把dict_keys转换成列表就行:
car = { "brand": "Ford", "model": "Mustang", "year": 1964 } x = list(car.keys()) # 转换成独立列表 print(x) car["color"] = "white" print(x) # 输出仍为['brand', 'model', 'year'],不会随字典更新
内容的提问来源于stack exchange,提问作者Md. Al Baki Akon
相关产品推荐
相关产品推荐

