- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在 Python 2.6 和 3.2 中遇到了这种令我惊讶的行为:
>>> xs = dict.fromkeys(range(2), [])
>>> xs
{0: [], 1: []}
>>> xs[0].append(1)
>>> xs
{0: [1], 1: [1]}
但是,3.2 中的 dict
推导式表现出更加礼貌的举止:
>>> xs = {i:[] for i in range(2)}
>>> xs
{0: [], 1: []}
>>> xs[0].append(1)
>>> xs
{0: [1], 1: []}
>>>
为什么 fromkeys
会这样?
最佳答案
您的 Python 2.6 示例等效于以下内容,这可能有助于澄清:
>>> a = []
>>> xs = dict.fromkeys(range(2), a)
结果字典中的每个条目都将引用同一个对象。正如您所见,改变该对象的效果将通过每个 dict 条目可见,因为它是一个对象。
>>> xs[0] is a and xs[1] is a
True
使用字典推导,或者如果你被困在 Python 2.6 或更早版本并且没有字典推导,你可以通过使用 dict()
和生成器来获得字典推导行为表达式:
xs = dict((i, []) for i in range(2))
关于python - 使用 fromkeys 和可变对象创建字典。惊喜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174723/
从 Python 3.6 开始,常规的字典会记住其插入的顺序:就是说,当遍历字典时,你获得字典中元素的顺序跟它们插入时的顺序相同。 在 3.6 之前,字典是无序的:遍历顺序是随机的。 关于有序字
我想创建一个非常严格的安全管理器,所以我扩展了 SecurityManager 并覆盖了所有自定义的 checkXXX 方法。 但后来我发现我的安全管理器没用,因为任何人都可以: System.set
所以我已经工作了一段时间了,似乎无法弄清楚这个该死的 ListView 业务..我让它在另一个应用程序中工作,但是当我复制粘贴时(我知道)它不起作用。所以在逛了大约6个小时后我决定来这里。 此代码执行
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我注意到 bash shell 可以为您的命令建议命令行开关。 只需键入您的命令、破折号 (-) 和制表符。 shell 将向您显示可用的开关。 例如,尝试: andy@andyx:~$ java -
这个问题在这里已经有了答案: How can I initialize a dictionary of distinct empty lists in Python? (7 个回答) 关闭2年前。 我
一个好熟人和前同事突然给我打电话,并给了我一份我真的不能忽视的契约(Contract)。他坚信我会很快掌握并掌握 C#(过去在 -> c/c++/PHP/Python/Lua 方面的经验)。 这个问题
我想在我的 Objective-C iPhone 应用程序中使用一些 C++ STL 集合。显然这可以通过给文件扩展名 ".mm"来实现。与此相关的怪癖/惊喜有哪些? 我想使用我熟悉的基本容器( ve
我正在尝试使用 scikit-surprise 模块来构建推荐系统,但是在编译它时遇到错误。 我收到 ImportError:无法导入名称“Reader”错误 我的类(class)如下 import
我是一名优秀的程序员,十分优秀!