首頁  >  文章  >  後端開發  >  為什麼 `dict.fromkeys()` 建立共享列表,以及如何避免它?

為什麼 `dict.fromkeys()` 建立共享列表,以及如何避免它?

Linda Hamilton
Linda Hamilton原創
2024-11-25 01:54:11206瀏覽

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