【问题标题】:Why does this copy of a list modifies the original one? [duplicate]为什么这个列表副本会修改原始列表? [复制]
【发布时间】:2021-11-07 12:13:11
【问题描述】:

我在摆弄列表,我不明白为什么列表的副本会修改原始列表。

winC 是一组将修改给定列表的参数。

originList 保持不变。

那么newList就是originList的一个拷贝,这样我就可以修改它并和之前的比较结果了。

winC = [[[1, 1, 1], [0, 0, 0], [0, 0, 0]],
        [[0, 0, 0], [1, 1, 1], [0, 0, 0]],
        [[0, 0, 0], [0, 0, 0], [1, 1, 1]],
        [[1, 0, 0], [1, 0, 0], [1, 0, 0]],
        [[0, 1, 0], [0, 1, 0], [0, 1, 0]],
        [[0, 0, 1], [0, 0, 1], [0, 0, 1]],
        [[1, 0, 0], [0, 1, 0], [0, 0, 1]],
        [[0, 0, 1], [0, 1, 0], [1, 0, 0]]]


originList = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
newList = originList.copy()

print(originList)
print(newList)

for x in range(len(winC)):
    for y in range(len(winC[x])):
        for z in range(len(winC[x][y])):
            if winC[x][y][z] == 1:
                newList[y][z] += 1     ## Note that newList is being modified, not originList

print(originList)
print(newList)

当我运行这段代码时,originList 和 newList 发生了变化,尽管我只修改了 newList。我尝试过使用 .copy()、list(originList) 和 originList[:],但这些似乎都不起作用。我仍在使用 Python 3.9.6 我该怎么办?

【问题讨论】:

标签: python python-3.x list


【解决方案1】:

它不起作用的原因是它的副本只是产生了一个浅拷贝。您只是在创建一个指向内存中相同数据的新变量。试试这个而不是你的复制行。

import copy

newList = copy.deepcopy(originalList)

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多