首頁  >  文章  >  後端開發  >  以下是一些標題選項,涉及“神秘”和“意外行為”方面: * 為什麼 `dict.fromkeys` 對可變物件的行為如此奇怪? *`d之謎

以下是一些標題選項,涉及“神秘”和“意外行為”方面: * 為什麼 `dict.fromkeys` 對可變物件的行為如此奇怪? *`d之謎

DDD
DDD原創
2024-10-26 14:52:03924瀏覽

Here are a few title options, playing on the

揭開dict.fromkeys 和可變物件的神秘面紗

Python 中的dict.fromkeys 函數與可變物件一起使用時可能會出現意外行為,如下例所示:

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
# xs now contains {0: [1], 1: [1]} instead of {0: [1], 1: []}</code>

令人困惑的行為

這種行為似乎與字典理解相矛盾,字典理解為每個鍵保留不同的值:

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
# xs still contains {0: [1], 1: []}</code>

理解差異

主要區別在於這兩種方法創建字典的方式。在 Python 2.6(及更早版本)中,dict.fromkeys 為所有鍵引用相同的可變對象,而字典推導式為每個鍵創建不同的對象。

結果是當 xs[0] 在第一個中發生突變時例如,變更反映在 xs[1] 中,因為它們引用相同的列表物件。相反,在第二個範例中,列表是不同的,因此改變 xs[0] 不會影響 xs[1]。

避免意外

避免對於這種意外行為,建議盡可能使用字典推導式。如果字典推導式不可用(例如,在 Python 2.6 中),則可以使用帶有 dict 函數的生成器表達式來建立不同的物件:

<code class="python">xs = dict((i, []) for i in range(2))</code>

以上是以下是一些標題選項,涉及“神秘”和“意外行為”方面: * 為什麼 `dict.fromkeys` 對可變物件的行為如此奇怪? *`d之謎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn