【发布时间】:2020-02-23 05:08:51
【问题描述】:
注意:这是一段更大、更复杂的代码的一部分,考虑到上下文,这行代码是有意义的。我知道我可以简单地在列表中写 1。
我所指的代码来自另一个问题: How to implement an efficient bidirectional hash table?
无论如何,我不明白为什么可以附加返回值列表,以及为什么该更改反映在字典中包含的列表中。据我所知,返回的值是列表的某种副本,而不是字典中的列表本身:
>>> dict = {}
>>> dict.setdefault("a",[]).append(1)
>>> print(dict)
>>> {"a": [1]}
>>> dict = {}
>>> l = dict.setdefault("a",[])
>>> l.append(1)
>>> print(l)
>>> [1]
>>> print(dict)
>>> {"a": [1]}
更奇怪的是,直接追加到列表中是行不通的。直接说,我的意思是:
>>> dict = {}
>>> dict.setdefault("a",[].append(1))
>>> print(dict)
>>> {"a": None}
所以我没想到的是实际发生的事情(更改返回值并对该值的副本进行更改),而我认为不可能的事情不是(直接附加到列表)。
如果有人知道这是为什么,并且我可以在其中阅读有关此行为的更多信息以加深我的理解,那将不胜感激。
谢谢。
【问题讨论】:
标签: python-3.x list class dictionary instance