Python创建空列表字典:dict构造器与fromkeys()的区别

半杯拿铁
半杯拿铁
发布时间:2026-10-13| 4人浏览过
原创

本文对比Python中创建键值为空列表的两种方法:dict构造器与fromkeys()。通过实验发现,fromkeys()若传入可变对象(如空列表[]),会导致所有键共享同一对象引用,修改任一值将影响全部。推荐使用dict构造器生成独立列表,避免此类陷阱。

在Python中,若需构建键值均为空列表的字典,存在多种实现路径。然而,不同方法在底层机制上是否存在差异?这需要通过实际实验进行验证,并深入剖析其背后的成因。本文将针对两种常见方法展开实验与原理分析。

假设我们需要构建一个类似如下结构的字典,其中键为整数,值为空列表,应如何实现?

{1:[], 2:[], 3:[], 4:[]}

方法1:利用字典构造器

通过调用dict构造器,逐一生成(key, value)键值对来构建字典。


> key = [1, 2, 3, 4]
> a = dict([(k,[]) for k in key])
> a
{1: [], 2: [], 3: [], 4: []}

方法2:使用fromkeys()方法

调用字典内置方法fromkeys(key list, default value),基于给定的键列表和默认值创建新字典。


> key = [1, 2, 3, 4]
> b = {}.fromkeys(key,[])
> b
{1: [], 2: [], 3: [], 4: []}

结果对比分析

这两种方法生成的字典在行为上是否有区别?我们可以通过以下代码进行检验:


> a[1].append(1)
> a
{1: [1], 2: [], 3: [], 4: []} # 仅影响对应的键值列表
>
> b[1].append(1)
> b
{1: [1], 2: [1], 3: [1], 4: [1]} # 所有键值列表都受影响

观察上述实验结果,使用fromkeys()方法生成的字典中,所有键对应的空列表似乎都增加了一个元素。这表明它们可能指向同一个内存对象。

原因深度解析

从实验结果可以看出,通过fromkeys()方法创建的字典,其各键对应的空列表实际上是同一个对象。造成这一现象的原因是:传递给fromkeys()函数的参数“[]”在内存中仅存在一个实例,fromkeys()将该实例的浅拷贝赋值给了字典中的所有键。

若该对象为可变类型(mutable),后续对该列表的任何修改都会影响字典中所有键的值,从而引发逻辑错误。因此,在创建包含可变对象(如列表、字典)作为值的字典时,应严格避免使用fromkeys()方法。

如需了解更多关于Python中创建空列表字典的其他技巧与最佳实践,请参阅下方的相关链接。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。