python - 更改一个列表会更改另一个列表

标签 python

当我更改一个列表时,另一个列表也随之更改。

a = [[1, 1], [2, 2], [3, 3]]
b = list(a)
a[0][0] = 100
print(a)
print(b)

当我这样做时,a 是 [[100, 1], [2, 2], [3, 3]]。 b 也是 [[100, 1], [2, 2], [3, 3]]

b = a[:] 也不能解决问题。

为什么会这样?

最佳答案

您所做的是浅拷贝。浅拷贝和深拷贝之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关:

浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对在原始对象中找到的对象的引用。 深拷贝构造一个新的复合对象,然后递归地将在原始对象中找到的对象的副本插入其中。

你想做的是创建一个全新的对象,这样一个对象就不会干扰另一个对象。以下是如何进行深拷贝。

import copy

a = [[1, 1], [2, 2], [3, 3]]
b = copy.deepcopy(a)
a[0][0] = 100
print(a)
print(b)

关于python - 更改一个列表会更改另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41605086/

相关文章:

python - 寻找 Psyco 的良好替代品(Python->C 编译器)

python - python中函数的动态输入数

python - 仅获取张量的一部分的对角线元素

python - 运行 pyOpenGL 时出现 NameError

python - 将从浏览器获取的 XPath 转换为 Scrapy 可用的 XPath

python - 读取 python 列表并从给定列表中删除某些数字

Python if-else 代码样式,用于减少舍入 float 的代码

python - 用于确定重叠日期范围的 SQL

python - 无法加载合作实验室

python - 使用 Python 2.7 在包含 .py 的文件夹的子文件夹中调用应用程序