首页 > 解决方案 > 为什么插入方法会影响两个列表?

问题描述

我列出了一份清单,然后复制了一份。我试图在每个元素的元素中插入不同的值。

list1 = [
    [0, 0, 0],
    [0, 0, 1],
    [0, 1, 0],
    [0, 1, 1],
    [1, 0, 0],
    [1, 0, 1],
    [1, 1, 0],
    [1, 1, 1]
]

list2 = list1.copy()

for i in range(8):
    list1[i].insert(0, 0)
    list2[i].insert(0, 1)

但结果是两个列表都受到两个插入的影响。我知道它们是不同的对象,因为我使用id(list1)and打印了它们的 ID id(list2),所以我不明白为什么会这样。任何帮助都会很有用。

先感谢您。

标签: pythonlistinsert

解决方案


使用deepcopy.

from copy import deepcopy
list1 = [
    [0, 0, 0],
    [0, 0, 1],
    [0, 1, 0],
    [0, 1, 1],
    [1, 0, 0],
    [1, 0, 1],
    [1, 1, 0],
    [1, 1, 1]
]

list2 = deepcopy(list1)
for i in range(8):
    list1[i].insert(0, 0)
    list2[i].insert(0, 1)

输出

list1: [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 1, 1, 0], [0, 1, 1, 1]]
list2: [[1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1]]

推荐阅读