也许这是一个愚蠢的问题,但我想知道为什么这实际上有效:
a = {'a': 1, 'b': 2}
a = a.items() # or .iteritems() on python2 # or even a = (i for i in a)
b = [i for i in a]
b
[('b', 2), ('a', 1)]
为什么我可以用变量上的生成器替换变量?这不删除原始字典的实际内容吗?为什么它仍然知道该变量中的内容?
因为尝试
a['a'] # before creating b
会产生TypeError
,因为
'dict_items'对象不可订阅
答案 0 :(得分:2)
这是因为在评估表达式之前未分配a.items()
。也就是说,a
被评估为生成器,然后a
被分配给它。由于a
不再引用字典,因此未更改生成器。字典仍然存在;它不再被称为{{1}}。
答案 1 :(得分:0)
如果你这样做
type(a) #before creating b
你会得到
=> <class 'dict_items'>
请记住a.items()会返回一个副本。来自documentation:
dict.items(): Return a view object of the dictionary’s list of (key, value) pairs.
您在分配
时失去了对字典的引用a = a.items()