【问题标题】:Python problem - Editing value in dictionary inside two dimensional list edits the whole matrix instead of only one itemPython 问题 - 在二维列表中编辑字典中的值会编辑整个矩阵而不是仅编辑一个项目
【发布时间】:2022-11-16 07:50:54
【问题描述】:

我有一个矩阵(二维列表)在包含"val": False的整个范围内填充了字典类型的变量

问题是当我只想更改矩阵中的一项并将该特定项的值更改为 True 时。

这部分代码:matrix[3][2]["val"] = True 以某种方式导致整个矩阵更新“val”值并将所有 False 值更改为 True。

这是我的代码:

defval = {
  "val": False
}

matrix = []

for x in range(5):
  row = []
  for i in range(5):
    row.append(defval)
  matrix.append(row)

matrix[3][2]["val"] = True

【问题讨论】:

  • 您将 defval 附加到矩阵的所有条目中。因此,内存中只有一个字典被所有条目引用。当您更新字典时,所有条目都会“更新”,因为它们都引用同一个字典。试试row.append({"val": False})(我会发布更详细的答案)

标签: python list dictionary


【解决方案1】:

使用row.append(defval)时,python不会复制存储在defval中的dict,而是在数组中存储对该dict的引用。 因此,所有行都隐含地使用相同的数组。当您修改条目时,所有行都会被修改,因为它们都引用同一个字典。

下面的代码给出了一个类似的例子:

blah = [1]
some_list = [blah, blah]
some_list[0][0] = 2
print(some_list)
# [[2], [2]]
print(blah)
# [2]

blah_1 = [1]
blah_2 = [1]
some_list_2 = [blah_1 , blah_2]
some_list_2[0][0] = 2
print(some_list_2)
# [[2], [1]]
print(blah_1)
# [2]
print(blah_2)
# [1]

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多