首页 >后端开发 >Python教程 >为什么 `dict.fromkeys()` 创建共享列表,以及如何避免它?

为什么 `dict.fromkeys()` 创建共享列表,以及如何避免它?

Linda Hamilton
Linda Hamilton原创
2024-11-25 01:54:11290浏览

Why Does `dict.fromkeys()` Create Shared Lists, and How Can I Avoid It?

Fromkeys 注意事项:了解字典初始化的行为

在 Python 中,dict.fromkeys() 方法通常用于创建字典将指定的键分配给空列表。然而,对其行为的误解导致了意想不到的结果。

为什么 fromkeys() 很棘手

当提供空列表 [] 作为 dict 的第二个参数时.fromkeys(),结果字典中的所有值都指向 same 列表对象。这意味着对一个值的任何修改都会影响所有值。

替代解决方案

要解决此问题,建议使用以下解决方案:

  • 使用字典推导式:

    在 Python 2.7 或更高版本中,字典推导式是最简洁、可读的解决方案:

    data = {k: [] for k in range(2)}
  • 使用列表推导式with dict():

    在早期的 Python 版本中,列表理解可以传递给 dict() 构造函数:

    data = dict([(k, []) for k in range(2)])
  • 在 dict() 中使用生成器表达式:

    在 Python 中2.4-2.6,生成器表达式可以与dict()一起使用,括号可以是省略:

    data = dict((k, []) for k in range(2))

示例

以下示例说明了 fromkeys() 的默认行为与推荐解决方案之间的差异:

# Default behavior of fromkeys()
data = {}
data = data.fromkeys(range(2), [])
data[1].append('hello')
print(data)  # Output: {0: ['hello'], 1: ['hello']}

# Using a dictionary comprehension
data = {k: [] for k in range(2)}
data[1].append('hello')
print(data)  # Output: {0: [], 1: ['hello']}

通过理解 fromkeys() 的细微差别,开发者可以有效地创建字典空列表并维护单独的键寻址。

以上是为什么 `dict.fromkeys()` 创建共享列表,以及如何避免它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn