对我的重复变量的更改会修改原始变量

问题描述 投票:0回答:1

如果我定义两个变量

puzzle = [[1, 2, 3]]
test_puzzle = puzzle

修改

test_puzzle
时,更改也会应用到
puzzle
。我不想修改原来的
puzzle
变量。如何在不修改原始列表的情况下创建重复列表?

我在这里找到了解决方案: python:对复制变量的更改会影响原始变量

这里: 如何克隆列表,使其在分配后不会意外更改?

我尝试了

test_puzzle = puzzle[:]
test_puzzle = list(puzzle)
test_puzzle = puzzle.copy()
,但都导致了同样的问题。

我的代码:

    puzzle = [[1, 2, 3]]
    test_puzzle = puzzle
    test_puzzle[0][1] = 7
    print(puzzle)
    print(test_puzzle)

我的输出:

    -> [[1, 7, 3]]
    -> [[1, 7, 3]]
python python-3.x nested nested-lists
1个回答
0
投票

[:]
copy
不会将列表复制到外部列表中

因此您要更改相同的对象,但您可以使用

deepcopy
来修复该问题,或者简单地复制其中的列表:

from copy import deepcopy

puzzle = [[1, 2, 3]]
test_puzzle = deepcopy(puzzle)
# or
# test_puzzle = [x[:] for x in test_puzzle]
test_puzzle[0][1] = 7
print(puzzle)
print(test_puzzle)

将会导致

[[1, 2, 3]]
[[1, 7, 3]]
© www.soinside.com 2019 - 2024. All rights reserved.